[英]url rewrite with nginx
我正在尝试将http://www.mydomain.com/xxxxx
重写为http://www.mydomain.com/page1.php?h=xxxxx
我用这个规则
rewrite /([a-z1-9]+)$ /page1.php?h=$1 last;
它正确地重定向到page1.php
但在单击(page1.php?h=xxxxx)
的链接后,转到(page2.php?h=xxxxx)
它将重定向到同一页面(page1.php?h=xxxxx)
,而不输入(page2.php?h=xxxxx)
我不知道为什么,有人可以帮助我吗?
谢谢
由于nginx位置不允许负匹配,因此以下内容显然无法使用。 (请参阅: https : //stackoverflow.com/a/16304073/398519 )
好吧,如果切换设置不是一种选择,那么您将需要一个位置,例如:
location !~* \\.php$ { rewrite /([a-z1-9]+)$ /page1.php?h=$1 last; }
我相信(未经测试)它不应该与
.php
或任何其他带有.ext
项目匹配,并且只能从webroot部分提取。 不幸的是,我目前无法测试。
对于初学者,您的最初规则太含糊。 您需要一些东西来区分什么进入第1页和什么进入第2页。
例如: http://www.domain.com/p1/xxxxxxx
: http://www.domain.com/p1/xxxxxxx
这样,您可以解析p1 / p2等并知道如何处理。 为了完整起见,以下是一些示例规则:
rewrite /p1/([a-z1-9]+)$ /page1.php?h=$1 last;
rewrite /p2/([a-z1-9]+)$ /page2.php?h=$1 last;
如果要使用原始规则,则需要添加文件检查和/或将正则表达式更改为不匹配.php
或.whatever
我不知道如何在nginx上执行此操作,除了在根位置之前创建location
部分外所以它首先被困在那里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.