2016-11-22 67 views
0

這是我的設置。 我有example.com,它有文件和子目錄。其中一個文件是maintenance.php,其中一個目錄是/ admin。我試圖將example.com的所有請求重定向到example.com/maintenance.php,除example.emaintenance.php外(不這樣做會導致錯誤)以及example/admin中的所有頁面。 example.com/file1應該重定向到example.com/maintenance.php,example.com/maintenance.php不應該導致任何錯誤,並且example.com/admin/file1不應該重定向。如何使用htaccess重定向除1個目錄和1個文件以外的所有目錄?

這就是我,我不能去上班:

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

example.com/admin仍然重定向到example.com/maintenance.php

感謝所有

+0

即使答案不適合你,你也應該回應。 – Walf

回答

-1

確保您的example.com/admin網址不是404 Not Found。當服務器嘗試重定向到錯誤文檔時,它將重定向到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] 

我也避開了路徑中的小點,因爲這樣做很好。 (避免維護xphp也不重定向。)

0

當您的站點不可用時,切勿使用外部重定向;你需要設置一個503頭,否則你可能會毀掉你的搜索引擎排名。

留下任何現有的重寫規則獨自一人,和所有的人之前,補充一點:

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

maintenance.php第一線應該是

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

它仍然可以擁有的內容。

如果您仍然無法進入管理員,您至少可以看到還有哪些網址需要列入白名單。您可能還需要排除媒體,CSS和/或js目錄。

完成後,下一次將該規則註釋爲#

相關問題