2014-01-12 81 views
6

我需要一個mod_rewrite的所有http請求重定向到https,但我想不排除某些URL的mod_rewrite - 排除網址

# force https 
RewriteCond %{HTTPS}   off 
RewriteCond %{HTTP_HOST}  ^secure\. [NC] 
RewriteCond %{REQUEST_URI}  !gateway_callback [NC] 
RewriteRule ^.     https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,QSA] 

匹配其gateway_callback必須排除

此網址不應該是所有URL重定向,但它確實!?

http://secure.localhost/da/gateway_callback/29/ 

試過刷新DNS緩存在瀏覽器中,但該網址仍重定向到https

+1

暫時更改爲'R = 302'(找到,而不是永久移動)來測試它,並使用與您以前測試過的不同整數值(不同整數值)的URI嘗試它。我希望你現在有什麼工作,現在至少要刪除我的答案。 –

+0

301和302給出了相同的結果 – clarkk

+0

不,他們沒有,他是正確的建議。瀏覽器將緩存301個響應,即使重定向規則發生變化,也不會反映出來。瀏覽器清除緩存+重新啓動是必要的。或隱身模式。 – w00t

回答

6

與配置的主要問題是REQUEST_URI變量包含後的一切,包括斜槓。第三個RewriteCond語句需要更新爲如下內容:

RewriteCond %{REQUEST_URI} !^/da/gateway_callback/.*$ [NC] 

這應該與您提供的示例相匹配。其中[^/]+匹配一個或多個字符,這是不是一個斜槓

RewriteCond %{REQUEST_URI} !^/[^/]+/gateway_callback/.*$ [NC] 

:如果URI並不總是與/da/開始,那麼你可能需要把一個通配符。

我會建議總是儘量使用正則表達式錨,因爲它消除了歧義。嘗試匹配REQUEST_URI的原始RewriteCond不使用它們,這可能會使管理員不經意地一瞥。

另請注意,official documentation中的RewriteCondRewriteRule指令的所有相關示例均使用起始錨點。

0

能尾隨斜線讓你從匹配?我從來不清楚尾部斜線是否保留。我建議改變你的第三個條件

RewriteCond %{REQUEST_URI} !/gateway_callback/\d+/?$ [NC] 
+0

用new reg exp更新了這個問題..但是'http:// secure.localhost/da/gateway_callback/29 /'仍然被重定向到https:// – clarkk