繁体   English   中英

用nginx重写URL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM