2015-09-25 40 views
1

我想寫一個htaccess規則,一切都重定向到/管理員,除非它是/用戶/ *的.htaccess:試圖重定向一切目錄

這裏是我到目前爲止,但有一個重定向循環和我想不通爲什麼:

<IfModule mod_rewrite.c> 

    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    RewriteCond %{REQUEST_URI} !^/admin [NC] 
    RewriteCond %{REQUEST_URI} !^/users [NC] 
    RewriteRule ^(.*)$ /admin [R=301,L,NC] 

    # Redirect Trailing Slashes... 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 
    RewriteRule ^sitemap.xml$ /sitemap [L,P] 


    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule> 

回答

0

使用THE_REQUEST變量,而不是REQUEST_URIREQUEST_URI值會被你的最後一條規則改變index.php,這將再次使這個規則火:

RewriteCond %{THE_REQUEST} !\s/+(users|admin)[/\s?] [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^/admin [R=301,L] 

,並確保清除瀏覽器緩存。

+0

這已部分工作,雖然它也重定向js,css,png等。 – Karl

+0

當然,因爲你沒有這樣的要求來避免重定向cs/js/css等。現在嘗試編輯規則。 – anubhava

+1

道歉沒有說明,它現在正在工作,非常感謝:) – Karl

0

的問題是,你使用的還是那些條件之間:

RewriteCond %{REQUEST_URI} !^/admin$ [NC] 
RewriteCond %{REQUEST_URI} !^/users$ [NC] 
RewriteRule ^(.*)$ /admin [R=301,L,NC] 
+0

剛試過這個,我仍然得到一個重定向循環。 – Karl

0

你有幾個問題,首先你需要刪除或者從第一RewriteCond,因爲它會嘗試並匹配兩個規則,並從兩端刪除$

RewriteEngine on 

RewriteCond %{REQUEST_URI} !^/admin [NC] 
RewriteCond %{REQUEST_URI} !^/users [NC] 
RewriteRule ^(.*)$ /users [R=301,L,NC] 

正如它的目錄,則REQUEST_URI/users//users和$告訴它說那是REQUEST_URI串使其完全匹配的結束。

作爲301重定向,某些瀏覽器可能會緩存此重定向(Firefox在我的PC上執行,但Chrome沒有),因此難以調試。

+0

我剛剛在一個從未訪問過該網站的瀏覽器中嘗試過這一點,但不幸的是它並未解決問題。 – Karl

+0

我用我的完整htaccess更新了我的問題,這樣您就可以看到是否有其他任何可能影響它的問題。 – Karl