由于重新设计和开发,我的任务是清理旧网站遗留的30,000个左右的网址错误。
我通常使用.htaccess来做这件事,但我怀疑在.htaccess文件中有30,000个301重定向是明智的!
你们有些人用什么方法来解决这个问题?
提前致谢。
答案 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配置,因为您也可以将列表编写为不同的格式,例如数据库表。
请注意:我添加escape
和lowercase
只是因为我需要编写的网址有重音符号。如果您的网址没有重音符号,则可以将其删除。
如果你想在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时那样对服务器产生巨大影响