![nginx 重写不包括.php 文件?](https://linux22.com/image/582764/nginx%20%E9%87%8D%E5%86%99%E4%B8%8D%E5%8C%85%E6%8B%AC.php%20%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我在 nginx 站点配置中设置了这一点,它可以完美地将所有.html
请求重定向到/index.php
。但是它不会重写test.php
到/index.php
,而是会引发 404 错误。
有人能解释一下吗?这是我的网站配置:
server {
listen 80 default_server;
location / {
root /srv/www/htdocs;
index index.php;
try_files $uri $uri/ /index.php;
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param HTTPS on; # <-- add this line
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
}
}
}
任何帮助都值得感激 - 我正在撕扯我的头发!
答案1
location ~* \.php$
将匹配任何内容*.php
并导致try_files
返回它,无论它是否存在(因此出现 404)。考虑使用改写反而!
答案2
当将 try_files 指令直接放入服务器时,只有在没有位置匹配时才会对其进行评估,因此如果请求已经以 .php 结尾,则该指令不会生效。解决此问题的方法是try_files $uri /index.php =404;
在 php 位置中添加一个。