htaccess url masking mod_rewrite

时间:2011-07-11 13:32:44

标签: .htaccess url mod-rewrite masking

我做了一些URL屏蔽,一切都很好用。我现在有一个问题要解决:

RewriteRule ^(.*)/(.*)/clubs/(.*)/$ teams.php?competition=$1&season=$2&teamid=$3

通过上述内容我可以通过2种方式访问​​同一页,www.domain.com/premier-league/2010-2011/arsenal/www.domain.com?competition=premier-league&season=2010-2011&teamid=arsenal

我的重写规则中是否有一种方法我可以重定向网址(理想情况下是301)有人是通过不整洁的方式“www.domain.com?competition=premier-league&season=2010-2011&teamid=arsenal”进行的吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

如果在符合“反向”模式的规则之后添加另一个重写规则,并将两者都标记为[L] ast规则,则可能有效。我首先重写url以包含查询字符串,然后[C]将该字符串包含在下一个规则中。之后我们[R]对浏览器进行了描述。

RewriteRule ^(.)/(.)/clubs/(.*)/$ teams.php?competition=$1&season=$2&teamid=$3 [L]
RewriteRule ^(.+) $1%{QUERY_STRING} [C]
RewriteRule ^teams.php?competition=([a-zA-Z0-9]+)&season=([a-zA-Z0-9]+)&teamid=([a-zA-Z0-9]+)$ $1/$2/clubs/$3/ [R=301,L]

注意我没有测试过这个或第二条规则的正则表达式。可能需要稍微调整字符范围。另外,我还没有在第二条规则中测试查询字符串重写。

修改:有关mod_rewritehttp://httpd.apache.org/docs/2.0/misc/rewriteguide.html

的一些常见用例,请参阅此处