我想删除php文件扩展名。所以我搜索并尝试了这段代码。
效果很好,但是当我尝试不存在的页面时。
它只是说“找不到档案”。在我写'try_files $ uri ...;'之前它返回/404.html。
我试过try_files $ uri = 404;在.php $中,但所有页面都返回到/404.html。
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name localhost;
root /var/www/html;
include /etc/nginx/default.d/*.conf;
location / {
try_files $uri $uri.html $uri/ @extensionless-php;
index index.html index.php;
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
error_page 404 /404.html;
location = /40x.html {
root /var/www/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html;
}
}
我该如何解决这个问题?
答案 0 :(得分:0)
您正在将.php
文件传递给PHP处理器而不检查是否存在。
您应该修改location ~ \.php$
块,以便nginx
使用404响应处理不存在的文件,而不是让PHP抱怨。
尝试类似:
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
我删除了额外的root
指令,因为它只是令人困惑,因此块现在从外部块继承正确的值。我删除了fastcgi_index
,在这种情况下没有使用。我已在fastcgi_param
下方include
订购,以避免无声地覆盖您的fastcgi_param
语句。