2012-05-04 27 views
9

這裏是我的.htaccess文件:.htaccess - 如果rewriterule爲true,則停止處理?

Options +FollowSymlinks 
RewriteEngine on 

Rewritecond %{http_host} ^mysite.com [nc] 
Rewriterule ^(.*)$ http://www.mysite.com/$1 [r=301,nc] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule . /404.php 

第一屆的RewriteCond /重寫規則塊是將用戶重定向到www,如果他們輸入的地址加www。

第二個rewritecond/rewriterule塊將用戶重定向到我創建的頁面,如果它們輸入了不存在的地址。

每這些規則適用於它自己:

如果我的.htaccess文件只包含第一個塊,然後將它成功地重定向到WWW地址非www地址。

如果輸入不存在的地址,用戶將被成功重定向到我的頁面404.php。

然而,如果.htaccess文件同時包含塊,並進入一個非www地址,則代替成功重定向到WWW地址,將出現以下情況:

(1)以下顯示的是在頁面上:

永久移動

該文檔已移至此處。

此外,嘗試使用ErrorDocument處理請求時遇到500內部服務器錯誤錯誤。

的Apache/1.3.41服務器在mysite.com端口80

(2)下面的條目在錯誤日誌中生成:

[週五5月4一時54分19秒2012] [錯誤] [客戶端109.109.109.109] mod_rewrite: 達到內部重定向的最大數量。假設配置錯誤。如果需要,使用'RewriteOptions MaxRedirects'來增加限制。

我認爲會發生什麼是無限循環以某種方式被生成。

我想知道是否告訴.htaccess文件停止處理命令,如果滿足第一個條件將解決問題。那麼有誰知道如何做到這一點?

(旁註。一般情況下,我找到的文檔在那裏上的.htaccess是絕對可怕的。我不知道其他人的感覺類似。)提前

感謝。

回答

10
+1

我把你的建議,所以我的文件的唯一變化是,第一重寫規則有以下幾種: 'Rewriterule ^(。*)$ http://www.mysite.com/$1 [r = 301,nc,L]' 現在一切似乎都正常。 謝謝。 – oyvey

+0

無需重新迭代該網站。而且:Apache RewriteRules默認情況下是貪婪的。 ☞'重寫規則(。*)$ 1 [R = 404,L]' –

3

你可以試試這個代碼,而不是:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

ErrorDocument 404 404.php 

Rewritecond %{HTTP_HOST} ^mysite\.com$ [NC] 
Rewriterule^http://www.mysite.com%{REQUEST_URI} [R=302,NC,L] 

一旦你驗證它是否工作正常,那麼你改變R=302R=301

+0

謝謝。我實際上最初通過ErrorDocument處理了錯誤地址的重定向,但如果我沒有記錯,它不適用於以php結尾的地址,這就是我切換到當前代碼的原因。 – oyvey