我从旧网址迁移:
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,从而避免减慢网络
答案 0 :(得分:1)
您可以将第一条规则保留为保释规则:
# IF
RewriteCond %{QUERY_STRING} !^id=\d+$
RewriteRule ^ - [L]
如果查询字符串中不存在?id=<number>
,则不会评估此下的任何规则。