Nginx +重写+ php-fpm =混乱

时间:2014-01-27 19:17:17

标签: nginx rewrite php

我正从Apache迁移到Nginx。我将Apache重写规则转换为nginx规则时遇到了问题。我想要转换的内容:

RewriteRule ^$ www/controller.php?_url_=index [QSA,L]
RewriteRule ^/+$ www/controller.php?_url_=index [QSA,L]
RewriteRule ^([a-zA-Z0-9_]+)(/([a-zA-Z0-9_/]*))?$ www/controller.php?_url_=$1&_req_=$2 [QSA,L]
RewriteRule ^([a-zA-Z0-9/]+)controller.php?(.*)$ www/controller.php?$2 [QSA,L]

我尝试使用的内容:

rewrite ^/$ /www/controller.php?_url_=index break;
rewrite ^/+$ /www/controller.php?_url_=index break;
rewrite ^/([a-zA-Z0-9_]+)(/([a-zA-Z0-9_]*))?$ /www/controller.php?_url_=$1&_req_=$2 break;
rewrite ^/([a-zA-Z0-9/]+)controller.php?(.*)$ /www/controller.php?$2 break;

如果我使用上述规则我的浏览器正在下载php文件(服务器没有执行它) - 我猜测它没有被传递给PHP-FPM。在某个地方,我发现我应该取代“休息”;与“最后”;像:

rewrite ^/$ /www/controller.php?_url_=index last;

在替换之后我仍然从http://example.org下载php文件,但是当我访问http://example.org/login时,我进入无限循环。我阅读了nginx文档和不同的例子(也在StackOverflow),但是我找不到正确的配置。有人能指出我正确的方向吗?

这是我的整个配置文件:

server {
listen       80;
server_name  10.10.100.172;
error_log    /var/log/nginx/example.com.error.log debug;
rewrite_log on;


location / {
root   /var/www/webs;
    index  index.php index.html index.htm;
rewrite ^/$ /www/controller.php?_url_=index last;
    rewrite ^/+$ /www/controller.php?_url_=index last;
    rewrite ^/([a-zA-Z0-9_]+)(/([a-zA-Z0-9_]*))?$ /www/controller.php?_url_=$1&_req_=$2 last;
    rewrite ^/([a-zA-Z0-9/]+)controller.php?(.*)$ /www/controller.php?$2 last;
}


error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

location ~ \.php$ {
    root           /var/www/webs;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

}

修改

我将规则移到了位置段之外并使用了“break”。在每条规则的最后。当我去example.org/login/时,我可以到达/www/controller.php?url=login&req=/ - controller.php负责无限循环。当我尝试访问example.org或example.org/时,我正在下载controller.php文件 - 就像它没有被传递给PHP-FPM一样。有什么猜测吗?

1 个答案:

答案 0 :(得分:2)

我在位置段之外使用了上述规则并且它有效!我尝试在不同的浏览器中查看我的页面,并且ecerything很好。我总是忘记删除缓存..