Nginx try_files不适用于以.php结尾的URL



我的Nginx配置文件中的try_files指令似乎只适用于特定情况。以下是我正在使用的内容:

   location / {
            try_files $uri $uri/ /route.php?_route_url=$uri;
    }

如果我导航到/admin/popups/image.php,它会正确加载,因为那是一个现有文件-(我相信这是try_files语句中的第一个参数)。如果我转到/admin/webpages/it正确加载-这将是第三个参数-admin/webpages/不存在,route.php在/modules/webpages/sadmin/index.php中拉入一个文件。当我转到/admin/webpages/edit.php时,我得到一个404。在我看来,它应该达到try_files中的第三个arg并工作。如果我导航到/route.php_route_url=/admin/webpages/edit.php运行良好。

我一直在想这个问题,但我想不通。我相信这很简单,但我看不出来。谢谢。

更新:经过进一步调查,该块似乎没有反映出上面try_files中应该发生的更改:

  location ~ .php$ {
    fastcgi_split_path_info ^(.+.php)(/.+)$;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_intercept_errors off;
    fastcgi_buffer_size 16k;
    fastcgi_buffers 4 16k;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
}

不确定这是否有帮助。我想我需要在这个之前让原来的区块生效。感谢

试试这个,但要确保在服务器{}之间添加这个

location / {
    try_files $uri $uri/ /route.php?_route_url=$args;    
}

不要忘记重新启动nginx服务

我通过添加重写行找到了问题的答案

rewrite ^/admin/((?!popups).)*/([a-zA-Z0-9_-]+.php?)$ /route.php?_route_url=$uri&$args last;

谢天谢地,我在/admin/中只有一个实际的目录。

最新更新