Nginx,try_files&带前控制器的多个文件夹

时间:2013-08-16 13:56:11

标签: php nginx config

我无法绕过Nginxs'try_files。最近我在我的开发机器上安装了Nginx以支持Apache。我以前的工作方式是这样的:我在我的http目录的子文件夹中引导一个项目。如果这涉及laravel,wordpress,codeigniter或任何其他使用前端控制器使URL更具可读性的框架,我会在该目录中添加.htaccess来重写index.php的所有不存在的路径。

据说,这在Nginx上非常简单:try_files $uri $uri/ /index.php?$query_string它应该可行。但是,所有这一切都将所有内容重定向到$document_root中的index.php。例如:

文件结构:

  1. http/clients/cms/public/index.php前端控制器
  2. http/clients/cms/public/some/application/url使用参数someapplicationurl请求uri。
  3. http/clients/cms/public/images/image.png一个静态文件。
  4. http/clients/blog/index.php另一个前端控制器
  5. http/clients/blog/wp-content/image.png另一个静态文件
  6. http/clients/blog/some-article-title一个“漂亮的网址”,应该定向到4
  7. 现在,请求2,try_files检测到/ some,/ some / application和/ some / application / url不存在。它现在将重定向到/index.php。我希望它会重定向到public/目录中的index.php,但事实并非如此。相反,它重定向到$ document_root中的index.php(恰好包含phpinfo();调用,因此很容易看出它出错了。)。

    解决方案是在我的Nginx配置中创建多个位置块,但我不喜欢它。它会为我的引导过程增加大量的额外工作。

    有没有办法在目录中使用try_files,以便它的工作原理与apache替代?

    我的配置文件:

    server {
        listen              80;
        server_name         localhost,imac.local;
    
        access_log          /var/log/nginx/access.log;
        error_log           /var/log/nginx/error.log;
        rewrite_log         on;
    
        root                /Volumes/Storage/Fabian/Dropbox/Sites;
        index               index.php index.html;
    
        location / {
            try_files $uri $uri/ /index.php?$query_string;
            #echo $request_filename;
            #break;
        }
    
        location ~ \.php$ {
            fastcgi_pass                127.0.0.1:9000;
            fastcgi_index               index.php;
            #fastcgi_split_path_info        ^(.+\.php)(.*)$;
            include                     fastcgi_params;
            fastcgi_param               SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    
        location ~ /\. {
            deny all;
            access_log off;
            log_not_found off;
        }
    }
    

    谢谢!

0 个答案:

没有答案