URL にアクセスすると、www.example.gr
送信できるフォームをロードしますwww.example.gr/php/mail.php
。
私のファイルとフォルダの構造は次のようになります
root folder ( /var/www/html/app/ ) with these files:
index.php
test.php
and a second folder (/var/www/html/assets/ ) with these files:
php/phpmailer/...
php/mail.php
vendor/...
js/...
images/...
css/...
私のnginxの設定は
server {
server_name example.gr www.example.gr;
root /var/www/html/app/;
index index.php index.html index.htm;
location ^~ /php {
root /var/www/html/assets/php;
index mail.php mail.html;
try_files $uri $uri/ /php/mail.php?q=$uri&$args;
location ~* \.php(/|$) {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index mail.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/html/assets/php$fastcgi_script_name;
fastcgi_intercept_errors on;
}
}
# location /php/ {
# alias /var/www/html/assets/php/;
# }
location /js/ {
alias /var/www/html/assets/js/;
}
location /vendor/ {
alias /var/www/html/assets/vendor/;
}
location /images/ {
alias /var/www/html/assets/images/;
}
location / {
#try_files $uri $uri/ =404;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
ページはwww.example.gr
すべての画像、js、css ファイルとともに正常に読み込まれますが、送信が機能せず、アクセスするとwww.example.gr/php/mail.php
404 エラーが発生します。
どうすれば動作させることができますか?
答え1
root
ブロックのおよびブロックSCRIPT_FILENAME
の下の値がlocation ^~ /php
正しくありません。
現在処理中のURIにはプレフィックスが含まれており/php/
、値と組み合わせてroot
パス名を形成します(説明したようにここphp
) 。したがって、値に を含めないでくださいroot
。そうしないと、パス名に が含まれ.../php/php/...
、機能しなくなります。
試す:
location ^~ /php {
root /var/www/html/assets;
...
location ~* \.php(/|$) {
...
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
の値は、現在スコープ内にあるステートメント$document_root
の値と同じです。root