nginx 重写不包括.php 文件?

nginx 重写不包括.php 文件?

我在 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 位置中添加一个。

相关内容