1

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

我通常使用 .htaccess 来执行此操作,但我怀疑在 .htaccess 文件中包含 30,000 301 重定向是否明智!

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

提前致谢。

4

4 回答 4

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);
于 2012-12-06T17:09:36.903 回答
0

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

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

于 2012-12-06T17:00:39.320 回答
0

我已经在 404 页面上创建了一个重定向类,它将检查数据库是否有有效的 301 重定向页面并将其重定向,而不是提供 404 页面。如果无法确定,它会在数据库中将其标记为 404 页面,以便以后修复。

于 2012-12-06T17:01:27.307 回答
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

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

于 2012-12-14T14:08:29.027 回答