我的Nginx配置文件中的try_files指令似乎只适用于特定情况。以下是我与之合作的内容:
location / {
try_files $uri $uri/ /route.php?_route_url=$uri;
}
如果我导航到/admin/popups/image.php它正确加载,因为这是一个现有文件 - (我相信这是try_files语句命中的第一个arg)。如果我去/ admin / webpages /它正确加载 - 这将是第三个arg - / admin / webpages /不存在而route.php会在/modules/webpages/admin/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;
}
不确定是否有帮助。我猜我需要让原始块在此之前生效。感谢
答案 0 :(得分:0)
试试这个,但请确保在服务器{}
之间添加此项location / {
try_files $uri $uri/ /route.php?_route_url=$args;
}
不要忘记重启nginx服务
答案 1 :(得分:0)
我通过添加此重写行找到了我的问题的答案
temp_basedirs = []
for basedir in basedirs:
try:
if os.path.isdir(basedir):
temp_basedirs.append(os.path.abspath(basedir))
except ValueError:
print(basedir)
raise
basedirs = temp_basedirs
幸运的是,我在/ admin /.
中只有一个实际目录