0

我正在尝试重写http://www.mydomain.com/xxxxxhttp://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)

不知道为什么,谁能帮帮我?

谢谢

4

1 回答 1

0

显然,由于 nginx 位置不允许负匹配,以下内容将不起作用。(见:https ://stackoverflow.com/a/16304073/398519 )

好的,如果切换设置不是一个选项,那么您将需要一个位置,例如:

location !~* \.php$ {
    rewrite /([a-z1-9]+)$ /page1.php?h=$1 last;
}

我相信(未经测试)它不应该匹配.php或任何其他带有 a 的项目,.ext并且应该只从 webroot 部分中提取。不幸的是,我目前无法对其进行测试。


对于初学者,您的初始规则太模糊了。您需要一些东西来区分第 1 页的内容和第 2 页的内容。

如: 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 在根位置之前创建一个部分,以便它被困在那里第一的。

于 2013-11-13T16:02:43.957 回答