簡體   English   中英

.htaccess 301將所有https重定向到http除了一頁

[英].htaccess 301 redirect for all https to http EXCEPT ONE PAGE

這是我目前在.htaccess文件中的代碼:

Options +FollowSymLinks 
RewriteEngine on
RewriteBase / 
RewriteCond %{HTTP_HOST} ^example.com [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

我知道關於重寫的傑克...而且關於這個主題的所有其他帖子確實不符合我的標准,我不太了解該語言來嘗試和破譯它。

基本上我需要的是這個:

  1. 將“example.com”的所有實例重定向到“www.example.com”
  2. 將“ https //www.example.com”的所有實例重定向到“ http://www.example.com,但1頁除外 (如果重要,該頁面的文件名是payments.php)

我上面的代碼有效,但對於我需要https的1頁,它將URL重寫為http。 那一頁必須是https。

謝謝,克里斯

Apache / 2.2.6(Win32)mod_ssl / 2.2.8 OpenSSL / 0.9.8g PHP / 5.2.6

我在本地進行了測試,所有用例似乎都運行良好。 如果您還有其他問題,請隨時提出。

# Rewrite Rules for example.com
RewriteEngine On
RewriteBase /

# Redirect from example.com to www.example.com
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# Turn SSL on for payments
RewriteCond %{HTTPS} off
RewriteCond %{SCRIPT_FILENAME} \/payments\.php [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

# Turn SSL off everything but payments
RewriteCond %{HTTPS} on
RewriteCond %{SCRIPT_FILENAME} !\/payments\.php [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

重要! 當用戶從任何帶有www的 https頁面導航到沒有 www的任何https頁面時,他被要求接受非www域的安全證書。

例如(YES =請求接受證書,NO - 相反):

1) https://www.asdf.com/payments.php - YES (www.asdf.com)
2) http://www.asdf.com/phpinfo.php - NO
3) https://asdf.com/phpinfo.php - YES (asdf.com)
4) https://www.asdf.com/phpinfo.php - NO

我試圖重新排序.htaccess中的規則但沒有成功。 如果有人找到更好的解決方案,我們將非常感激。

除了威廉的偉大解決方案,你可以在https rewriterule之前否定請求uri

RewriteCond %{REQUEST_URI} !^/?payments\.php

這是一個很好的帖子,它似乎正確地重定向到http,但我想要一些如下的東西

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

#RewriteCond %{SERVER_PORT} !^443$
#RewriteRule ^products https://www.site.com/products/ [R=301,L]

# Disable SSL on pages other than payments.php
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^products
RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]

# Require SSL on payments.php
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} ^products\/?$
RewriteRule ^(.*)$ https://www.site.com/$1 [R=301,L]


RewriteCond $1 !^(index\.php|images|js|css|static|img|payment|robots\.txt|blank.gif)
RewriteRule ^(.*)$ index.php/$1 [L]

我的網址是http://www.sitename.com,並且正斜杠是可選的,我需要的是如果網址中沒有類似產品的文字那么它需要http://並且如果有一個字符串產品那么uri應該是https://

該怎么做...當我嘗試它時會進入循環...重定向循環。

我正在使用codeigniter框架工作,我已從網址中刪除index.php。

所以,如果發生http://sitename.com/products之類的事情,那么我希望它是https://sitename.com/products

如果網址中沒有產品,那么它應該重定向到http://

# Rewrite Rules for example.com
RewriteEngine On
RewriteBase /

# Redirect from example.com to www.example.com
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

# Disable SSL on pages other than payments.php
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^payments\.php$
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

# Require SSL on payments.php
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} ^payments\.php$
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

我沒有測試它,但這樣的東西應該工作

編輯:已更新

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM