当我将旧网站升级到新服务器时。因为我的旧网站有这么多动态网址,我计划将所有动态网址重定向到静态网址。因为我成功地将我的一些动态网址重定向到静态,但问题是我有大约5000个动态网址。所以我想使用.htaccess将所有动态网址重定向到主页。如何实现这一目标。在这方面,任何人都可以帮助我。
我的动态网址结构与此http://www.mysite.com/play.php?id=4818
我使用以下结构将大约50个网址重定向到静态。
RewriteCond %{QUERY_STRING} ^id=4818$
RewriteRule ^play\.php$ http://www.mysite.com/play/Dinos_Egg_Hatch? [R=301,L]
现在我的目标是将除已经重定向的网址之外的所有网址重定向到主页。
有什么想法吗?
答案 0 :(得分:9)
如果你有很多重定向,我已经回答了here一个关于电影的问题,但是你关于重定向,但原理是完全一样的。
经过长时间的聊天,我提出了解决方案:
你有大量的重定向:
RewriteCond %{QUERY_STRING} ^id=4177$
RewriteRule ^play\.php$ http://www.diz.com/play/Game1 [R=301,L]
RewriteCond %{QUERY_STRING} ^id=4195$
RewriteRule ^play\.php$ http://www.diz.com/play/Game2 [R=301,L]
RewriteCond %{QUERY_STRING} ^id=4303$
RewriteRule ^play\.php$ http://www.diz.com/play/Game3 [R=301,L]
...............
我已将所有要重定向的网址转储到文件中。像这样:
4177 Game1
4195 Game2
......
等等。
我已将此简单文本文件转换为哈希映射。像这样:
httxt2dbm -i dynamic.txt -o dynamic.map
现在我已经在我的vhost中完成了这个重写规则以进行测试,并且他们工作了:
RewriteMap dynamic \
dbm:/pathtofile/dynamic.map
RewriteCond %{QUERY_STRING} (^|&)id=([0-9]+)(&|$)
# if condition met, don't touch the URL but set an environment variable:
RewriteRule ^play\.php$ - [E=DYNAMIC:${dynamic:%2|}]
# if environment variable not empty = found => redirect:
RewriteCond %{ENV:DYNAMIC} !^$
RewriteRule ^play\.php$ http://www.mysite.com/play/%{ENV:DYNAMIC} [R=301,L]
注意:你告诉我你有自己的服务器。这就是我做出这个答案的原因,你必须在vhost
文件中添加这些重写文件,而不是在htaccess
文件中,否则它将无效 < / p>
现在,不是超过100个重写规则hack,你有5个很好的重写规则,它是动态的:如果你想添加另一个重定向,只需添加你的游戏dynamic.txt
,然后重新编译它: / p>
httxt2dbm -i dynamic.txt -o dynamic.map
无需重启服务器,它应该可以正常工作!!!
希望这有帮助!