通过的index.php路由请求nginx的[关闭](Routing requests throug

2019-08-17 06:02发布

我从迁移我的Apache服务器Nginx的和有一个非常简单.htaccess规则:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

其背后的想法是引导每个请求到前端控制器( index.php )。 我试图做同样的Nginx的。 我用了一个在线转换器,使这个Nginx的位置块:

location / {
    if (!-e $request_filename){
        rewrite ^(.*)$ /index.php break;
    }
}

但是当我把它添加到我的网站的配置的Nginx刚刚吐出来的是PHP文件下载的源代码。 作为参考,这里是整个配置文件:

http://pastebin.com/tyKtM1iB

我知道PHP的作品,因为如果我删除位置块,使文件与<?php phpinfo(); 它工作正常。

任何帮助,将不胜感激。

Answer 1:

这是我的路线如何一切的index.php,包括子目录的请求,HTTP ARGS,等。

location / {
    try_files $uri $uri/ /index.php?$args; #if doesn't exist, send it to index.php
}

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_intercept_errors on;
    # By all means use a different server for the fcgi processes if you need to
    fastcgi_pass   127.0.0.1:9000;
 }

因此,例如,这些被发送到index.php文件:

http://foo.bar/something/
http://foo.bar/something/?something=1

虽然这些直接进入文件

http://foo.bar/someotherphp.php
http://foo.bar/assets/someimg.jpg


Answer 2:

跳过正则表达式的结尾:

location / {
        index index.html index.php;
        if (!-e $request_filename) {
            rewrite ^.* /index.php break;
            fastcgi_pass 127.0.0.1:9001;
        }
}


文章来源: Routing requests through index.php with nginx [closed]