我的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/中只有一个实际的目录。