Htaccess错误的rewriterule覆盖正确的一个

时间:2017-09-16 13:54:16

标签: apache .htaccess mod-rewrite url-rewriting

我已经面对这个问题了很长一段时间,但我总是只是更改文件名,但这次我不能这样做

我设置了以下两个RewriteRules:

RewriteRule ^register-company register-company.php
RewriteRule ^register register.php

同样适用于

RewriteRule ^register/company register-company.php
RewriteRule ^register register.php

无论我做什么,更改顺序,添加标记,逃避炒作,它总是重定向到register.php而不是register-company,因为它应该(链接是domain.com/register-company)

实际上唯一有效的是完全改变名称,例如改为公司注册。请注意,如果我删除寄存器register.php行它可以正常工作并正确重定向到register-company.php

1 个答案:

答案 0 :(得分:1)

问题是您的目标URI register-company.php也匹配下一个规则的模式,即^register,因此第二个规则始终在第一个规则之后执行。

您需要在规则中使用结束锚点:

RewriteRule ^register-company/?$ register-company.php [L,NC]

RewriteRule ^register/?$ register.php [L,NC]

现在第二条规则不会触发,因为register-company.php^register/?$不匹配。

同样/?$在两个规则中都使用尾随斜杠。