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

问题描述:

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

我的动态的URL结构是这样的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] 

现在我的目标是重定向所有的URL,除了已经重定向的URL到主页。

有什么想法?

+0

您如何知道哪些网址已被重定向?一个列表?过滤器?正则表达式?怎么样?你的问题非常模糊。 – 2012-03-22 07:54:25

+0

@ Olivier Pons:我已经有一些我的书签网址,所以我将这些网址重定向到静态... – phphunger 2012-03-22 08:13:21

+0

不是静态的,它们是动态的,但它们是我们自己的游戏网址。如果用户为这些网址添加了书签,我不想让这些网址的流量松动。请告诉我如何将所有动态网址重定向到主页(index.php) – phphunger 2012-03-22 09:13:24

如果你有很多重定向,我已经做了一个很大的回答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 

现在我已经在我的虚拟主机测试这样做重写规则和他们的工作:

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] 

NB:你告诉我,你有你自己的服务器。这就是为什么我做了这样的回答,并你必须在你的vhost文件中添加这些的RewriteRules,而不是在你的htaccess文件,否则将无法正常工作


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

httxt2dbm -i dynamic.txt -o dynamic.map 

无需重新启动服务器,它应该完美地工作!

希望这有助于!