2009-12-04 52 views
117

排除目錄我在我的.htaccess文件8行重寫規則。我需要從這些規則中排除服務器上的兩個物理目錄,以便它們可以訪問。現在所有的請求都被髮送到index.php文件。的.htaccess mod_rewrite的 - 如何從重寫規則

目錄排除: 「admin」 和 「用戶」。

所以HTTP請求:http://www.domain.com/admin/不應該傳遞給index.php文件。

ErrorDocument 404 /index.php?mod=error404 

Options FollowSymLinks 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L] 

RewriteRule ^([^/])/([^/])\.html$ index.php?lang=$1&mod=$2 [L] 
RewriteRule ^([^/])/$ index.php?lang=$1&mod=home [L] 
+0

我覺得你忘記了'[^ /]'後面的量詞,因爲如果不允許的話就有一個簡單的空格(它必須用'\ '轉義)。 – Gumbo 2009-12-04 17:54:07

+0

True Gumbo,很好趕:)。它應該是^([^ /] +)。 – Kelvin 2009-12-04 21:02:04

回答

233

你的其他規則之前嘗試此規則:

RewriteRule ^(admin|user)($|/) - [L] 

這將結束改寫過程。

+0

Hello Gumbo,如果用戶鍵入domain.com/admin/(結尾斜槓),但沒有它,則代碼起作用。你有什麼可以改變這兩種情況下工作?謝謝 – Kelvin 2009-12-04 20:52:52

+0

@Kelvin:交替'($ | /)'應該處理這兩種情況。 – Gumbo 2009-12-04 21:56:26

+0

在這裏使用RewriteCond而不是RewriteRule更好嗎? – rineez 2012-08-14 03:04:51

18

添加一個條件來檢查admin目錄,是這樣的:

RewriteCond %{REQUEST_URI} !^/?(admin|user)/ 
RewriteRule ^([^/])/([^/])\.html$ index.php?lang=$1&mod=$2 [L] 

RewriteCond %{REQUEST_URI} !^/?(admin|user)/ 
RewriteRule ^([^/])/$ index.php?lang=$1&mod=home [L] 
+0

Hello Rob,我把這行寫在「RewriteBase /」之後,現在我得到了「500錯誤 - 內部服務器錯誤」 – Kelvin 2009-12-04 17:42:31

+0

@Kelvin我編輯了我的答案,在每個想要應用它的規則之前添加條件。 – Rob 2009-12-04 17:48:52

84

,你也可以做的就是把什麼含

RewriteEngine Off 

在要被重寫排除的文件夾.htaccess文件(由.htaccess文件,在樹的上漲規則)。簡單但有效。

+16

+1〜.htaccess分層操作,所以本地文件夾覆蓋父母,就像CSS或MVC中的正常級聯一樣。 – Atari 2013-10-30 18:12:51

+10

該死的,我希望我能在十年前瞭解到這一點...... – Rob 2014-08-28 01:39:57

+6

迄今爲止最好的解決方案。謝謝 – Dpedrinha 2016-02-19 04:57:09

4
RewriteEngine On 

RewriteRule ^(wordpress)($|/) - [L] 
3

我們使用以下的mod_rewrite規則:!

RewriteEngine敘述上
的RewriteCond%{REQUEST_URI}^/測試/
的RewriteCond%{REQUEST_URI}^/我的文件夾/
重寫規則(。*)http://www.newdomain.com/ $ 1 [R = 301,L]

此重定向(永久地與一個301ř將對該站點的所有流量改爲http://www.newdomain.com,除了對/ test和/ my-folder目錄中的資源的請求。我們通過使用(。*)捕獲組將用戶轉移到他們請求的確切資源,然後在新URL中包含$ 1。注意空間。

2

如果你想從規則中刪除一個特定的目錄(意思是,你要刪除的目錄FOO),你可以使用:

RewriteEngine on 

RewriteCond %{REQUEST_URI} !^/foo/$ 
RewriteRule !index\.php$ /index.php [L] 

的重寫規則上面會重寫所有requestes到/index.php不包括/foo/的請求。

要排除所有存在directries,您需要使用您的規則和以下的條件:

RewriteCond %{REQUEST_FILENAME} !-d 

以下規則

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule !index\.php$ /index.php [L] 

重寫一切(除了directries)到/索引。 php