由于重新设计和开发,我的任务是清理旧网站留下的 30,000 个左右的 url 错误。
我通常使用 .htaccess 来执行此操作,但我怀疑在 .htaccess 文件中包含 30,000 301 重定向是否明智!
你们中的一些人用什么方法来解决这个问题?
提前致谢。
在这里,您可以使用 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);
创建一个 PHP 页面以作为 404 处理程序运行。它应该检查传入的 URL,检查它是否应该从旧页面映射到新页面,然后发出 301。如果没有映射,则显示 404。
只需将此页面设置为 .htaccess 中的 404 处理程序即可。IIRC 这就是 Wordpress 在 IIS7 引入 URL 重写而不需要第 3 方 dll 之前在 IIS 上处理“干净”URL 的方式。
我已经在 404 页面上创建了一个重定向类,它将检查数据库是否有有效的 301 重定向页面并将其重定向,而不是提供 404 页面。如果无法确定,它会在数据库中将其标记为 404 页面,以便以后修复。
谢谢你们的帮助。我已经从 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
我已经为重定向添加了相当多的 url,到目前为止一切都很好,它并没有像添加到 .htaccess 时那样对服务器产生巨大影响