2012-02-03 27 views
1

的.htaccess的開始是htaccess rewriterule,[R,L = 301]標誌不會停止它。爲什麼?

RewriteEngine On 

#begin of rules for administration folder, redirect to https, if not https 
RewriteCond %{REQUEST_URI} ^/administration 
RewriteCond %{HTTPS} off 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R,L=301] 
#end of rules for administration folder 

#===no rules for /administration folder below this line=== 
#the rest part of .htaccess 

爲什麼剩下的.htaccess的一部分,仍然執行了https://www.mydomain.com/administration/index.php?如何停止執行管理文件夾後面的url的.htaccess文件的其餘部分?我的代碼有什麼問題? 謝謝。

回答

3
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
-1

這是因爲你有語法錯誤。的.htaccess將忽略示數行

更改此設置: -

RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R,L=301] 

要這樣: -

RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R=301] 
+0

卸下'L'標誌有時會引起問題。 – Gerben 2012-02-04 12:48:02

+0

真的嗎?我從來沒有遇到過的問題。在什麼情況下? – baynezy 2012-02-04 14:29:19

+0

您幾乎總是希望將[R]與[L]結合使用(即使用[R,L]),因爲[R]標誌本身預先設置爲http:// thishost [:thisport] to該URI,然後將其傳遞給規則集中的下一個規則,這通常會導致「請求中的URI無效」 uest'警告。 (http://httpd.apache.org/docs/current/rewrite/flags.html#flag_r) – Gerben 2012-02-04 15:44:53

1

添加此行.htaccess文件的頂部:

RewriteRule ^administration - [NC,L] 
0

這幾天我有類似的問題,我在PHP聊天中從用戶DaveRandom得到了一個非常有趣的答案:

「基本上,mod_rewrite的有效的循環運行(這是不是真的,但有效的,這就是它)和[L]標誌就像是一個‘繼續’語句在PHP(它會停止處理下面的規則當前的迭代,但它會從頭開始再次處理規則)。因此,在你的規則,在第一次迭代是匹配的第一個規則,然後第二次迭代跳過第一條規則(它產生的輸出與輸入相同),然後匹配第二個規則「

可能的解決方案: 「如果你使用的是Apache 2.4使用的,而不是[L] [END]將是一個修復」。

相關問題