2011-11-16 26 views
1

私は404エラーリンクの列とそれぞれの301リダイレクトを持つスプレッドシートを持っています。例えば用 )バルク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を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を変換うまく機能し得る、とdbm:キーワード(およびhttxt2dbmコマンドを使用して高速化ハッシュマップにtxtファイルを変換します場合は、それはリンクされた文書で説明されています)。

+0

上記の解決策は本当に魅力的です。 :) どうもありがとう.. :) –

0

RewriteMapは確かにregileroの記述通りです。しかし、私は彼のコードがどのように動作するはずなのか理解できず、動作させることができませんでした。 1つの問題は、それ以上の書き換えが存在しないことを前提としていることである(行方不明[L])これがない作品:Apache設定で

(.htaccessファイルでは動作しません):.htaccessファイルで

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

(また)Apacheの設定で動作します:redirects.txtで

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

(注意:スラッシュはオプションではありません)

/old /new 

私はdbmへの切り替えが余分な手間に値するとは思いません。 http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemapで述べたように、ルックアップはとにかくメモリにキャッシュされます。プレーンテキストとDBM形式の場合

は、ルックアップキーはマップファイルの変更のmtimeにまでにおけるコア をキャッシュされたファイルやサーバが 再起動を行います。 404.phpでこのファイルのinclude_once

0

- 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 =ソースURLは、

durl =宛先URL

関連する問題