2011-07-25 85 views
1

我正在面對使用.htaccess的URL重寫問題。如何使用.htaccess將HTTPS重定向到某些頁面的HTTP

我必須將所有網址重定向到除4個網址之外的HTTPS。下面是我的.htaccess文件中的代碼:我需要禁用HTTPS用於以下網址

RewriteEngine On 
Options +FollowSymlinks 
RewriteBase/

RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_REFERER} !^https(.*)/(.*)$ [NC] 
RewriteCond %{REQUEST_URI} ^/$ [NC] 
RewriteCond %{REQUEST_URI} ^/?index\.php$ [NC] 
RewriteCond %{REQUEST_URI} ^/?index\.php?view=default [NC] 
RewriteCond %{REQUEST_URI} ^/?index\.php?view=news [NC] 
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301, NC, L] 

# Require SSL on all other pages 
RewriteCond %{HTTPS} !on 
RewriteRule ^(.*)$ https://%{HTTP_HOST}r%{REQUEST_URI} [R=301, NC, L] 

  1. mydomain.com/
  2. mydomain.com/index.php
  3. mydomain.com/index.php?view=new
  4. mydomain.com/index.php?view=new&abc=xyz&aaa=bbb…
  5. mydomain.com/index.php?view=default

對於以上5個URL,我想在http中重定向,但它不起作用。它僅將所有URL重定向到HTTPS。

+0

是否有一個特定的原因你不需要HTTPS? – zneak

+0

是的一些頁面我只需要http。 –

+0

是的。我們知道您希望爲這些用戶禁用HTTPS。我的問題是,「爲什麼你需要禁用它?」 – zneak

回答

1

RewriteCond條件的作用類似於「和」,所以它不會同時匹配所有4種文件模式。一種選擇是單獨的一套規則 - 我喜歡在搞清楚的時候這樣做。另一種選擇是獲得「或」模式。

查詢字符串在RewriteCond中處理,而不是在RewriteRule中處理。

我不確定你需要在HTTP_REFERER上測試什麼,所以我將它遺漏了。

這分開爲兩個規則,以保持簡單。第一個是沒有參數的簡單斜線或可選的index.php。第二個檢查查詢字符串view = default或new。

RewriteCond %{HTTPS} on 
RewriteCond %{QUERY_STRING} ^$ 
RewriteCond %{REQUEST_URI} ^/(index\.php)?$ [NC] 
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301, NC] 

RewriteCond %{HTTPS} on 
RewriteCond %{QUERY_STRING} ^view=(default|new(&.*)?)$ [NC] 
RewriteCond %{REQUEST_URI} ^/?index\.php$ [NC] 
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301, NC] 

查詢字符串條件檢查view=default準確,或view=newview=new&any=other...可選&.*意味着接下來的事情必須是一個符號或沒有,這防止視圖= NEW2被錯誤匹配。

請注意,當您將用戶從https重定向到http時,用戶可能會收到有關重定向到「不安全」頁面的瀏覽器警告。重定向警告不再是一個大問題;我只記得從IE6開始。 How to redirect from HTTPS to HTTP without annoying error messages

編輯: 我添加了一個狀態到第一規則的空查詢字符串。我意識到,沒有它匹配任何查詢字符串。

0

我也面臨這個問題。對我來說這幫助

RewriteCond %{HTTPS} !^on$ 
RewriteCond %{REQUEST_URI} ^(/check-out|/payment)$ 
RewriteRule (.*) https://www.my_site.com/$1 [R,L] 

您需要更改頁面命名&您的網站的網址。

相關問題