我的域名 nginx 配置如下所示:
server {
listen *:80;
server_name mywebsite.org ;
root /var/www/mywebsite.org/web;
index index.html index.htm index.php index.cgi index.pl index.xhtml;
error_page 400 /error/400.html;
error_page 401 /error/401.html;
error_page 403 /error/403.html;
error_page 404 /error/404.html;
error_page 405 /error/405.html;
error_page 500 /error/500.html;
error_page 502 /error/502.html;
error_page 503 /error/503.html;
recursive_error_pages on;
location = /error/400.html {
internal;
}
location = /error/401.html {
internal;
}
location = /error/403.html {
internal;
}
location = /error/404.html {
internal;
}
location = /error/405.html {
internal;
}
location = /error/500.html {
internal;
}
location = /error/502.html {
internal;
}
location = /error/503.html {
internal;
}
error_log /var/log/ispconfig/httpd/mywebsite.org/error.log;
access_log /var/log/ispconfig/httpd/mywebsite.org/access.log combined;
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location /stats/ {
index index.html index.php;
auth_basic "Members Only";
auth_basic_user_file /var/www/clients/client0/web15/web/stats/.htpasswd_stats;
}
location ^~ /awstats-icon {
alias /usr/share/awstats/icon;
}
location ~ \.php$ {
try_files /b55a31c419b809eb02d1c0a0c8f6e014.htm @php;
}
location @php {
# try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/lib/php5-fpm/web15.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
}
location / {
root /var/www/mywebsite.org/web/mainpage;
try_files $uri $uri/ /index.php?$args;
}
}
此配置是使用 ISPConfig 面板的默认配置,我只是添加了“location /”指令,因为我的网站位于文件夹/mainpage 中。
我的问题:如果 index.php 位于文件夹 /mainpage 中,则 nginx 不会读取它,而是读取上一个文件夹“/web”中的 index.php但如果我将文件 index.html 放入文件夹 /mainpage 中,服务器将正确读取它... 对我来说,这种行为很奇怪。为什么服务器可以正确读取 /mainpage 中的文件 index.html,但在同一文件夹中的 index.php 中却不行。删除/重命名文件夹 /mainpage 中的文件 index.html 后,服务器会自动读取上级文件夹“/web”中的文件 index.php。不想读取 /mainpage 文件夹中的 index.php。
答案1
index.html
location /
仅匹配,但index.php
匹配location ~ \.php$
,然后由处理location @php
。请参阅文档用于 nginxlocation
指令匹配顺序。
您可以尝试通过替换来解决您的$document_root
问题location @php
/var/www/mywebsite.org/web/mainpage