Nginx RegEx 对多个站点进行重写或内部重定向循环
Posted
技术标签:
【中文标题】Nginx RegEx 对多个站点进行重写或内部重定向循环【英文标题】:Nginx RegEx to multiple sites make rewrite or internal redirection cycle 【发布时间】:2018-07-02 09:49:06 【问题描述】:我正在尝试将我的应用程序从 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 来自动重定向页面并且一切正常,但我有必要为每个应用程序设置一个唯一的位置,使用 RegEx 上的“sibe”一词来捕获所有网站。
每个应用的一个位置有效:
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 对所有“sibe”应用程序使用唯一位置时,出现“内部重写或内部重定向周期”错误。
location ~ /([a-z]*sibe[a-z]*)/
set $subdomain $1;
alias /var/www/$subdomain/;
try_files $uri $uri/ /$subdomain/index.php;
【问题讨论】:
当root /var/www
在所有情况下都可以使用时,为什么还要使用alias
?
没有别名返回 404 未找到所有 sibe 应用
@mayconfsbrito,看看 cnst 解决方案是否不起作用。然后我会试一试你的问题,否则我认为他发布的内容应该有效
【参考方案1】:
这与try_files
的工作方式有关——http://nginx.org/r/try_files——最后一个参数只是到指定 URL 的内部重定向:
如果没有找到任何文件,则内部重定向到最后一个参数中指定的 uri。
您大概认为您的 try_files 将涉及 .php
处理程序,但是在随后的 location
搜索中发生的事情是您最终处于与开始时完全相同的状态。
根据http://nginx.org/r/location,位置指令的顺序很重要——第一个匹配的正则表达式胜出:
然后检查正则表达式,按照它们在配置文件中出现的顺序。正则表达式的搜索在第一次匹配时终止,并使用相应的配置。
因此,您希望将 .php
放在基于站点的处理程序之前。
【讨论】:
以上是关于Nginx RegEx 对多个站点进行重写或内部重定向循环的主要内容,如果未能解决你的问题,请参考以下文章