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