@H_403_1@很难在Nginx配置中找出位置块.这就是我所拥有的:
@H_403_1@
server {
listen 80;
server_name _;
access_log /var/log/Nginx/example.com.access_log;
error_log /var/log/Nginx/example.com.error_log warn;
root /var/www/root;
index index.PHP index.htm index.html;
fastcgi_index index.PHP;
location /wp/ {
root /var/www/wordpress;
index index.PHP index.htm index.html;
fastcgi_index index.PHP;
}
location ~* \.PHP${
try_files $uri =404;
keepalive_timeout 0;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
}
@H_403_1@浏览/按预期工作并在/ var / www / root中显示网站,但如果位置正常,我认为他们应该浏览/ wp应该带我到/ var / www / wordpress中的wordpress安装.我得到的只是:
@H_403_1@
@H_403_1@404 Not Found @H_403_1@Nginx/0.7.67@H_403_1@如果我将/ var / www / wordpress目录重新定位到/ var / www / root / wordpress并浏览到/ wordpress,则完美无缺. @H_403_1@我在位置块做错了什么? @H_403_1@我以前从未配置过Nginx,而且还是一个完整的web newb. @H_403_1@我希望能够为其他应用程序提供更多的位置块.这实际上只是在这里发布的一个基本示例. @H_403_1@在Debian Squeeze backports中将Nginx更新为版本.没有得到改善: @H_403_1@
@H_403_1@404 Not Found @H_403_1@Nginx/1.1.19
最佳答案
它不起作用的原因是……
@H_403_1@在服务器级别,您有“root / var / www / root”.所以基本上,除非特别重写,否则每个位置块都将使用它.这是一种很好的做法.
@H_403_1@然后,您已在“wp”位置块中将其覆盖为“/ var / www / wordpress”.但是,PHP位置块仍然使用默认值.
@H_403_1@现在当你向“/ww/folder_a/file_a.PHP”发出一个请求时,请求命中了“/ var / www / word文件”,该命令位于“/var/www/wordpress/folder_a/file_a.PHP”,请求命中了PHP位置块并给出了根文件夹该块的活动状态将在“/var/www/root/folder_a/file_a.PHP”中查找该文件.结果,您得到“未找到404”.
@H_403_1@您可以将服务器级别根指令更改为“/ var / www / wordpress”并删除wp位置中的覆盖.这将解决该问题,但“/ var / www / root”下的PHP脚本将不再起作用.不确定你有没有.
@H_403_1@如果你需要在“/ var / www / root”和“/ var / www / wordpress”下运行PHP,你需要这样做:
@H_403_1@
原文链接:https://www.f2er.com/nginx/434566.htmlserver {
...
root /var/www/root;
index index.PHP index.htm index.html;
# Keep fastcgi directives together under location
# so removed fastcgi_index
# Put keepalive_timeout under 'http' section if possible
location /wp/ {
root /var/www/wordpress;
# One appearance of 'index' under server block is sufficient
location ~* \.PHP${
try_files $uri =404;
fastcgi_index index.PHP;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
}
location ~* \.PHP${
try_files $uri =404;
fastcgi_index index.PHP;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
}
@H_403_1@也就是说,在wp位置块下嵌套一个重复的PHP位置块.它将继承wp的root指令.
@H_403_1@为了帮助保持事物的简洁和易于编辑等,您可以将fastcgi指令放入单独的文件中并根据需要包含它.
@H_403_1@所以在/path/fastcgi.params中,你有:
@H_403_1@
fastcgi_index index.PHP;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
@H_403_1@你的conf可以是:
@H_403_1@
server {
...
root /var/www/root;
...
location /wp/ {
root /var/www/wordpress;
location ~* \.PHP${
try_files $uri =404;
include /path/fastcgi.params;
}
}
location ~* \.PHP${
try_files $uri =404;
include /path/fastcgi.params;
}
}
@H_403_1@这样,如果你需要编辑任何fastcgi参数,你只需在一个地方编辑它.
@H_403_1@PS.更新你的Nginx不会解决这个问题,因为它不是版本问题..但无论如何都要更新!