2012-12-06 96 views
1

我一直在负责清理30,000所以从旧网站的重新设计和开发的结果,留下的网址错误。301重定向在.htaccess 30,000错误

我通常使用的.htaccess要做到这一点,但我怀疑这将是明智的,有30000 301重定向的.htaccess文件里面!

有一些你使用什么样的方法来解决这个问题呢?

在此先感谢。

+0

我想知道答案呢!特别是当你使用smarty模板 – shnisaka

+0

你可以使用正则表达式表达这个...只是像这个问题:http://stackoverflow.com/questions/3077705/htaccess-regex-rewrite-rule – sleepsort

+0

我发现了一些模式和不同的场景,然后使用正则表达式来覆盖它们。你可以发表一些例子吗? –

回答

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

0

创建一个PHP页面作为404处理器进行操作。它应该检查传入的URL,检查它是否应该从旧页面映射到新页面,然后发出301.如果没有映射,则呈现404。 .htaccess,你去了。 IIRC这是在IIS7引入URL重写而不需要第三方DLL之前,Wordpress用于处理IIS上的“干净”URL的方式。

0

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

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,这是因为我需要编写的url需要重音符号。如果您的网址没有重音符号,则可以将两者都删除。

如果你想在PHP中实现这些重定向,这里的代码,你需要:

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