相同的.htaccess规则不起作用

时间:2017-05-24 16:10:34

标签: php .htaccess

我想重写这两个页面的网址:

原件:

http://example.com/team.php?PAGE=profile&LINK=jenifer

http://example.com/course.php?PAGE=view&LINK=dance

所需:

http://example.com/jenifer

http://example.com/dance

我试过这个规则

 RewriteRule ^([^/]*)$ /team.php?PAGE=profile&LINK=$1 [L]

 RewriteRule ^([^/]*)$ /course.php?PAGE=view&LINK=$1 [L]

我不知道为什么只有第一页被重新编辑,第二页也被重写为第一页。

另外,我的index.php被重定向到team.php

谢谢!

1 个答案:

答案 0 :(得分:0)

mod_rewrite依次查看每个规则,直到找到匹配的规则。

http://example.com/jenifer为例,其中jenifer的请求与第一个规则模式^([^/]*)$匹配。然后查看http://example.com/dance,再次dance与第一个规则模式^([^/]*)$匹配。第二条规则从未尝试过,因为第一条规则已经吞下了每个请求。

如果您的请求与模式^([^/]*)$匹配,则Apache将始终停在第一个RewriteRule,因为这是第一个匹配的。

如果你想区分团队成员和课程,你必须有不同的模式来匹配,正如@anubhava在评论中已经建议的那样,例如

RewriteRule ^team/([^/]*)$ /team.php?PAGE=profile&LINK=$1 [L]
RewriteRule ^course/([^/]*)$ /course.php?PAGE=view&LINK=$1 [L]

现在,当您收到http://example.com/team/jeniferhttp://example.com/course/dance的请求时,由于请求中的前导teamcourse,Apache可以选择正确的规则。