301重定向.htaccess中有30,000个错误

时间:2012-12-06 16:55:20

标签: php apache .htaccess

由于重新设计和开发,我的任务是清理旧网站遗留的30,000个左右的网址错误。

我通常使用.htaccess来做这件事,但我怀疑在.htaccess文件中有30,000个301重定向是明智的!

你们有些人用什么方法来解决这个问题?

提前致谢。

4 个答案:

答案 0 :(得分:3)

这里可以使用apache httpd

RewriteMap escape int:escape
RewriteMap lowercase int:tolower
RewriteMap my_redir_map txt:map_rewrite.txt
RewriteCond  ${my_redir_map:${lowercase:${escape:%{HTTP_HOST}%{REQUEST_URI}}}}  ^(.+)$
RewriteRule .*  http://%1 [R=301,L]

我通常直接在apache httpd配置中使用这个重写规则 在map_rewrite.txt文件中,您有一个制表符分隔文件,其中包含以下格式的重定向列表:

www.example.it/tag/nozze                www.example.it/categoria/matrimonio
www.example.it/tag/pippo                www.example.it/pluto
www.example.it/tag/ancora               www.google.com

如果您可以概括该方法会更容易,因为重定向具有共同的模式。但如果没有,在这种情况下,您只需要将重定向的URL添加到列表中。 注意研究RewriteMap配置,因为您也可以将列表编写为不同的格式,例如数据库表。

请注意:我添加escapelowercase只是因为我需要编写的网址有重音符号。如果您的网址没有重音符号,则可以将其删除。

如果你想在php中实现这些重定向,请输入你需要的代码:

 <?php
 $dest_url = "http://example.com/path...";
 header("HTTP/1.1 301 Moved Permanently");
 header("Location: ".$dest_url);

答案 1 :(得分:0)

创建一个PHP页面作为404处理程序运行。它应该检查传入的URL,检查它是否应该从旧页面映射到新页面,然后发出301.如果没有映射,则显示404。

只需将此页面设置为.htaccess中的404处理程序即可。 IIRC这就是在IIS7引入URL重写而不需要第三方dll之前,Wordpress用于处理IIS上的“干净”URL的方式。

答案 2 :(得分:0)

我已经在404页面上创建了一个重定向类,如果有一个有效的页面重定向到301并重定向它而不是给出404页面,它将检查数据库。如果它无法解决这个问题,它会在数据库中将其标记为404页面,因此可以稍后修复。

答案 3 :(得分:0)

谢谢你的帮助。我已经从freedev执行了建议的操作,但是在Apache中创建了一个单独的配置文件。

在httpd.conf文件中我添加了:

# Map settings
Include "conf/extra/map.conf"

map.conf文件:

RewriteEngine On
    RewriteEngine on
    RewriteMap url_rewrite_map txt:conf/map.map
    RewriteCond ${url_rewrite_map:$1|NOT_FOUND} !NOT_FOUND
    RewriteRule ^(.*) http://website.com/${url_rewrite_map:$1} [R=301]

map.map文件的格式为:

/oldname/   /newname

我为重定向添加了相当多的网址,到目前为止一直很好,它没有像添加到.htaccess时那样对服务器产生巨大影响