私は次のようなパスを持っていると言うことができます:
/var/www/myside/
そのパスには2つのフォルダーが含まれています... /static
および/manage
私はnginxにアクセスできるように設定したい:
/static
上のフォルダー/
(例 http://example.org/ )このフォルダには.htmlファイルがいくつかあります。
/manage
上のフォルダー/manage
(例 http://example.org/manage )この場合、このフォルダーにはSlimのPHPフレームワークコード-index.phpファイルはpublic
サブフォルダー(例:/var/www/mysite/manage/public/index.php)
私は次のような多くの組み合わせを試しました
server {
listen 80;
server_name example.org;
error_log /usr/local/etc/nginx/logs/mysite/error.log;
access_log /usr/local/etc/nginx/logs/mysite/access.log;
root /var/www/mysite;
location /manage {
root $uri/manage/public;
try_files $uri /index.php$is_args$args;
}
location / {
root $uri/static/;
index index.html;
}
location ~ \.php {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
}
}
/
とにかく正しく動作しますmanage
は動作しません。私は何か間違っていますか?誰が私が何を変えるべきか知っていますか?
マシュー。
/var/www/mysite/manage/public
のようなURIで/manage
のようなパスにアクセスするには、alias
ではなくroot
を使用する必要があります。詳細については このドキュメント をご覧ください。
両方のルートからPHPを実行する必要があると想定しています。この場合、2つのlocation ~ \.php
ブロックが必要になります。以下の例を参照してください。 /var/www/mysite/static
内にPHPがない場合、未使用のlocation
ブロックを削除できます。
例えば:
server {
listen 80;
server_name example.org;
error_log /usr/local/etc/nginx/logs/mysite/error.log;
access_log /usr/local/etc/nginx/logs/mysite/access.log;
root /var/www/mysite/static;
index index.html;
location / {
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
location ^~ /manage {
alias /var/www/mysite/manage/public;
index index.php;
if (!-e $request_filename) { rewrite ^ /manage/index.php last; }
location ~ \.php$ {
if (!-f $request_filename) { return 404; }
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
}
}
^~
修飾子を使用すると、プレフィックスの場所が同じレベルの正規表現の場所よりも優先されます。詳細については このドキュメント をご覧ください。
alias
とtry_files
ディレクティブは、 この長年のバグ のために一緒になりません。
if
ディレクティブの使用では、 この注意 に注意してください。