2016-11-22 1 views
0

私の設定です。 example.comにはファイルとサブディレクトリがあります。これらのファイルの1つはmaintenance.phpで、そのうちの1つは/ adminです。 example.comからexample.com/maintenance.phpへのすべてのリクエストをexample.com/maintenance.php(エラーは発生しない)とexample/adminのすべてのページにリダイレクトしようとしています。 example.com/file1はexample.com/maintenance.phpにリダイレクトする必要があります.example.com/maintenance.phpはエラーを起こさないはずです。example.com/admin/file1はリダイレクトしないでください。1つのディレクトリと1つのファイル以外のすべてのhtaccessでどのようにリダイレクトするのですか?

これは私が仕事に行くことができなかったことを持っているものです。

RewriteEngine On 
RewriteCond %{REQUEST_URI} !(.*)admin.* 
RewriteCond %{REQUEST_URI} !^/maintenance.php$ 
RewriteRule .* /maintenance.php [R=302,L] 

example.com/adminはまだ

おかげで、すべての

+0

回答があなたのために働いていない場合でも応答する必要があります。 – Walf

答えて

-1

をexample.com/maintenance.phpにリダイレクトexample.com/adminのURLが404見つからないことを確認してください。サーバがエラードキュメントにリダイレクトしようとすると、エラードキュメントがリダイレクトから除外されないため、リダイレクトはmaintenance.phpにリダイレクトされます。これを避けるには、エラー文書を除外するRewriteCondルールを追加することができます。例:

RewriteEngine On 

#Exclude *admin* and /maintenance.php 
RewriteCond %{REQUEST_URI} !.*admin.* 
RewriteCond %{REQUEST_URI} !^/maintenance\.php$ 

#This handles both 404 and 500 Errors 
RewriteCond %{REQUEST_URI} !^/path/to/(404|500)\.html$ 

RewriteRule .* /maintenance.php [R,L] 

また、パス内のドットをエスケープしました。これは、そうすることをお勧めします。 (maintenanceXphpのリダイレクトは避けてください。)

0

サイトが利用できないときは、外部リダイレクトを使用しないでください。あなたは503ヘッダーを設定する必要がありますか、またはあなたの検索エンジンのランキングを殺すかもしれません。

だけで、既存の書き換えルールのままにして、それらのすべての前にこれを追加します。

RewriteRule ^(?!maintenance\.php$|admin(?:$|/)) maintenance.php [NS,L] 

maintenance.phpの最初の行は

<?php 
header($_SERVER['SERVER_PROTOCOL'] . ' 503 Service Unavailable'); 

でなければなりませんそれはまだコンテンツを持つことができます。

まだ管理者になることができない場合は、少なくとも他のURLにホワイトリストを登録する必要があります。メディア、css、jsディレクトリを除外する必要があるかもしれません。

完了したら、次回は#のルールをコメントアウトしてください。

関連する問題