在.htaccess

时间:2015-06-29 15:41:36

标签: .htaccess mod-rewrite

我从旧网址迁移:

example.com/video?id=40

换一个新的:

example.com/video/name-of-video

但是他们不会分享任何领域,所以我不能为所有人制定一条规则,我必须为我拥有的每一个视频写一个重写:

RewriteCond %{QUERY_STRING} ^id=1$
RewriteRule (.*) http://www.example.com/video/name-of-video? [R=301,L]
RewriteCond %{QUERY_STRING} ^id=2$
RewriteRule (.*) http://www.example.com/video/name-of-video? [R=301,L]
RewriteCond %{QUERY_STRING} ^id=3$
RewriteRule (.*) http://www.example.com/video/name-of-video? [R=301,L]
RewriteCond %{QUERY_STRING} ^id=5$
...

所以我有超过6000次重写,这会减慢网络速度。 我想要实现的是检查网址是否包含查询字符串' id =(。*)'如果有,请检查哪个ID必须重定向到正确的视频。所以我想要这样的东西:

# IF
RewriteCond %{QUERY_STRING} ^id=(.*)$

# THEN
RewriteCond %{QUERY_STRING} ^id=1$
RewriteRule (.*) http://www.example.com/video/name-of-video? [R=301,L]
RewriteCond %{QUERY_STRING} ^id=2$
RewriteRule (.*) http://www.example.com/video/name-of-video? [R=301,L]
RewriteCond %{QUERY_STRING} ^id=3$
RewriteRule (.*) http://www.example.com/video/name-of-video? [R=301,L]
RewriteCond %{QUERY_STRING} ^id=5$

# ELSE DO NOTHING

因此,在每个加载页面上,只检查一个重写而不是6000,从而避免减慢网络

1 个答案:

答案 0 :(得分:1)

您可以将第一条规则保留为保释规则

# IF
RewriteCond %{QUERY_STRING} !^id=\d+$
RewriteRule ^ - [L]

如果查询字符串中不存在?id=<number>,则不会评估此下的任何规则。