Nginx RegEx到多个站点进行重写或内部重定向循环

时间:2018-01-23 14:24:01

标签: php mod-rewrite nginx location webserver

我试图将我的应用程序从Apache迁移到Nginx。在第一个我有mod_rewrite模块,自动将我的应用程序重定向到index.php页面,如下所示:

http://127.0.0.1/fwsibe/acesso <- URL displayed

http://127.0.0.1/fwsibe/index.php/acesso <- url accessed

所以,我在我的位置使用带有别名的try_files来自动重定向页面,一切正常,但我需要为每个应用设置一个唯一的位置,使用&#34这个词; SIBE&#34;在RegEx上捕获所有网站。

每个应用的一个位置有效:

location /fwsibe/ {
    alias       /var/www/fwsibe/;
    try_files   $uri $uri/ /fwsibe/index.php;
}
location /sibe/ {
    alias       /var/www/sibe/;
    try_files   $uri $uri/ /sibe/index.php;
}
location /portalsibe/ {
    alias       /var/www/portalsibe/;
    try_files   $uri $uri/ /portalsibe/index.php;
}
location /sibemovel/ {
    alias       /var/www/sibemovel/;
    try_files   $uri $uri/ /sibemovel/index.php;
}

但当我尝试使用RegEx的独特位置时,所有&#34; sibe&#34;应用程序我有#34;内部重写或内部重定向周期&#34;错误。

location ~ /([a-z]*sibe[a-z]*)/ {
    set         $subdomain          $1;
    alias       /var/www/$subdomain/;
    try_files   $uri $uri/ /$subdomain/index.php;
}

1 个答案:

答案 0 :(得分:2)

这与try_files的工作方式有关 - http://nginx.org/r/try_files - 最后一个参数只是指向指定网址的内部重定向:

  

如果找不到任何文件,则会进行内部重定向到最后一个参数中指定的uri。

据推测,您希望您的try_files涉及.php处理程序,但在后续location搜索中发生的事情是您最终处于与您开始的状态相同的状态。

根据http://nginx.org/r/location,位置指令的顺序很重要 - 匹配的第一个正则表达式胜出:

  

然后按照它们在配置文件中的出现顺序检查正则表达式。正则表达式的搜索在第一个匹配时终止,并使用相应的配置。

因此,您希望将.php放在基于站点的处理程序之前。