2012-12-06 93 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);