0

我做了一些 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

在我的重写规则中有没有办法可以重定向 URL(理想情况下是 301)有人通过不整洁的方式“ www.domain.com?competition=premier-league&season=2010-2011&teamid=arsenal”做到这一点吗?

提前致谢

4

1 回答 1

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

于 2011-07-11T13:38:34.990 回答