如何使用.htaccess将所有动态网址重定向到主页

php*_*ger -1 apache .htaccess mod-rewrite

当我将旧网站升级到新服务器时.因为我的旧网站有这么多动态网址,我计划将所有动态网址重定向到静态网址.因为我成功地将我的一些动态网址重定向到静态,但问题是我有大约5000个动态网址.所以我想使用.htaccess将所有动态网址重定向到主页.如何实现这一目标.任何人都可以在这方面帮助我.

我的动态网址结构是这样的 http://www.mysite.com/play.php?id=4818

我使用以下结构将大约50个url重定向到静态.

RewriteCond %{QUERY_STRING} ^id=4818$
RewriteRule ^play\.php$ http://www.mysite.com/play/Dinos_Egg_Hatch? [R=301,L]
Run Code Online (Sandbox Code Playgroud)

现在我的目标是将除已经重定向的网址之外的所有网址重定向到主页.

任何的想法?

Oli*_*ons 9

如果你有很多重定向,我在这里就一个关于电影的问题做了一个很大的答案,但是你关于重定向,但原理是完全一样的.


经过长时间的聊天,我提出了解决方案:

你有大量的重定向:

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]

...............
Run Code Online (Sandbox Code Playgroud)

我已将所有要重定向的URL转储到文件中.像这样:

4177 Game1
4195 Game2
......
Run Code Online (Sandbox Code Playgroud)

等等.

我已将这个简单的文本文件转换为哈希映射.像这样:

httxt2dbm -i dynamic.txt -o dynamic.map
Run Code Online (Sandbox Code Playgroud)

现在我已经在我的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]
Run Code Online (Sandbox Code Playgroud)

NB:你告诉我你有自己的服务器.这就是我做出这个答案的原因,你必须在你的vhost文件中添加这些重写文件,而不是在你的htaccess文件中,否则它将无法正常工作


现在,不是超过100个重写规则hack,你有5个很好的重写规则,它是动态的:如果你想添加另一个重定向,只需添加dynamic.txt你的游戏,并重新编译它:

httxt2dbm -i dynamic.txt -o dynamic.map
Run Code Online (Sandbox Code Playgroud)

无需重启服务器,它应该完美无缺!

希望这有帮助!