2010-01-16 73 views
12

下面是代碼我目前在我的.htaccess文件:我知道重寫插孔的.htaccess 301重定向所有HTTPS訪問http除了一個PAGE

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。

謝謝, 克里斯

+0

謝謝大家的意見! Chris – dell116 2010-01-16 23:02:53

回答

10

的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] 

重要!當用戶從任何HTTPS頁面WWW導航到任何HTTPS頁面而不WWW,他要求接受你的非www域名的安全證書。

例如(YES =請求接受該證書,NO - 對面):我試圖重新排序規則在.htaccess沒有成功

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 

。如果有人找到更好的解決方案,將不勝感激。

+0

謝謝!它完美的作品。與此同時,我想再讀一點這類東西。你有什麼好的建議嗎? – dell116 2010-01-16 23:05:55

+1

你可以隨時閱讀手冊;)http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html – 2010-01-16 23:10:51

-1
# 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] 

我沒有測試過,但這樣的事情應該工作

編輯:更新

+0

這仍然允許所有其他頁面都是https(不會將它們重寫爲http)。 這不會將http://www.example.com/payments.php改寫爲https://www.example.com/payments.php 第一個重定向仍然有效。 我看到你在.....,它看起來是正確的....它只是不工作。任何其他想法? 謝謝, Chris – dell116 2010-01-16 22:15:53

+0

我已經調整了一下你的代碼。但是,有一個問題需要接受example.com和www.example.com證書。 – 2010-01-16 22:39:07

5

除了威廉的偉大的解決方案,你可以否定在https重寫代碼前某處請求uri

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

這確實是適當的解決方案。 – dotancohen 2014-12-29 09:15:51

0

這是一個不錯的職位,似乎重定向到正常訪問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框架工作,我已經從url中刪除index.php。

所以如果像http://sitename.com/products發生的話,我想這是https://sitename.com/products

,如果有在URL中沒有的產品,那麼它應該重定向到http://

相關問題