我有電子表格,其中有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重定向?
我有電子表格,其中有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重定向?
批量設置的最佳方式是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
命令,但是鏈接的文檔解釋了這一點)。
上面的解決方案真的很有魅力。 :) 非常感謝.. :) –
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或服務器做一個 重新啓動。
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 =目標網址
您可以創建一個php errordocument for 404,並在那裏做重定向。 PHP比htaccess更適合。 – Gerben