2011-06-29 44 views
1

所以我用下面的強制我的網站進入維護模式,同時更新某些事情:.htaccess的維護模式允許某些目錄

# MAINTENANCE-PAGE REDIRECT 
<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteCond %{REMOTE_ADDR} !^23\.1\.12\.167 
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC] 
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC] 
RewriteRule .* /maintenance.html [R=302,L] 
</IfModule> 

這一直運作良好,但我現在處於維護模式時的情況說我希望排除某些目錄被髮送到maintenance.html,並讓他們顯示其正常內容。

因此,這將是這樣的:

root/ 
    .htaccess 
    maintenance.html 
    index.html 
    everything.else.html 
    /do_not_display_me 
    /display_me_always 

不知道這是可能從根級的.htaccess或者如果我將不得不巧妙運用子目錄.htaccess文件,任何幫助表示讚賞。

+0

所以..據我所知你想要一些文件夾始終可以訪問,無論維護模式與否,對不對?你想排除哪些文件夾(我假設你有多個文件夾)? – LazyOne

+0

@LazyOne - 是的,我想顯示幾個目錄 - 在上面的例子中它將是/ display_me_always。 – bMon

回答

2

這應該做的工作。它告訴Apache不要重寫這些文件夾(這使得維護規則被省略,因爲重寫鏈永遠不會到達它們)。

# activate rewrite engine 
RewriteEngine on 

# always allow these folders 
RewriteCond %{REQUEST_URI} ^/display_me_always [OR] 
RewriteCond %{REQUEST_URI} ^/another_folder [OR] 
RewriteCond %{REQUEST_URI} ^/even_more_folders 
RewriteRule .+ - [L] 

# maintenance rules 
RewriteCond %{REMOTE_ADDR} !^23\.1\.12\.167 
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC] 
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC] 
RewriteRule .* /maintenance.html [R=302,L] 
  1. 字母大小寫的問題,所以如果你需要匹配大小寫混合的拼寫插入到NC,[OR]
  2. 如果在根文件夾中具有相同名稱的文件,則可以考慮在文件夾名稱末尾添加斜槓/