Nginx try_files不适用于以.php

时间:2016-08-02 19:24:11

标签: php nginx nginx-location

我的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;
}

不确定是否有帮助。我猜我需要让原始块在此之前生效。感谢

2 个答案:

答案 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 /.

中只有一个实际目录