2011-11-16 45 views
1

我有電子表格,其中有404錯誤鏈接列及其301重定向。 爲e.g)批量301從htaccess重定向

404 error page     301 redirect  

http://www.abc.com/1.php   http://www.abc/com/2.php 
..............     ............ 

電子表格有大約1000多個鏈接。

有沒有辦法在Apache配置或htaccess我可以在哪裏處理批量301重定向?

+0

您可以創建一個php errordocument for 404,並在那裏做重定向。 PHP比htaccess更適合。 – Gerben

回答

2

批量設置的最佳方式是mod-rewrite中的RewriteMap指令。請注意,這在.htaccess文件中不起作用。你需要在一個真正的apache配置文件中編輯它(好消息是,這將比.htaccess動態配置更快)。

首先檢查txt:關鍵字。

可能是類似的東西:

RewriteMap myredirects txt:/path/to/my/txt/map.txt 
RewriteCond ${myredirects:$1} ^/.+ 
RewriteRule ^(.+)$ %0 [R=302] 

當你得到它的工作以及在301轉換302,和TXT文件轉換爲速度更快的HashMap與dbm:關鍵字(和httxt2dbm命令,但是鏈接的文檔解釋了這一點)。

+0

上面的解決方案真的很有魅力。 :) 非常感謝.. :) –

0

RewriteMap確實是regilero所說的方法。但是,我不明白他的代碼應該如何工作,我也不能讓它工作。一個問題是,它假設沒有進一步的重寫(缺少[L])這並不工作:

在Apache的配置(未在.htaccess工作):

RewriteMap myredirects txt:/var/www/mysite/redirects.txt 

在.htaccess(也適用於Apache的配置):

RewriteCond ${myredirects:%{REQUEST_URI}} .+ 
RewriteRule^${myredirects:%{REQUEST_URI}} [L,R=301] 

在redirects.txt(注:反斜槓不是可選)

/old /new 

我不確定切換到dbm是否值得額外的麻煩。 正如http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemap所述,查找會緩存在內存中。

對於純文本和DBM格式的文​​件查找到的鍵被緩存在覈心 直到映射文件中的變化的mtime或服務器做一個 重新啓動。

0

include_once此文件中404.php - 確保404.php被配置爲被稱爲當存在404:

//ini_set('display_errors',2); 
//ini_set('log_errors',0); 
//ini_set('error_reporting',E_ALL); 
$username = "dbuser"; 
$password = "dbpasswd"; 
$hostname = "db.hostname.com"; 
$database = "dbname"; 
$table = "tablename"; 
$curl = "http://". $_SERVER['HTTP_HOST']; 

$dbhandle = mysql_connect($hostname, $username, $password) 
    or die("Unable to connect to MySQL". mysql_error()); 
mysql_select_db($database) or die('Could not select database' . $database); 

$query = 'SELECT durl FROM urls where surl="' . $curl . '";'; 
$result = mysql_query($query) or die('Query failed: ' . mysql_error()); 

$durl = mysql_fetch_array($result); 
if(isset ($durl) && $durl !=""){ 
    header("HTTP/1.1 301 Moved Permanently"); 
    header("Location:". $durl); 
} 
//else{ 
// echo "404 Not Found "; 
//} 
// Free resultset 
mysql_free_result($result); 

// Closing connection 
mysql_close($dbhandle); 
?> 

表結構:

CREATE TABLE tablename (surl varchar(256), 
durl varchar(256)); 

SURL =源地址

durl =目標網址