2011-04-19 94 views
6

我有一個電子商務網站,我只想在位於https://mysite.com/buy如何僅在使用htaccess的某些頁面上啓用https?

因爲所有我的網頁上的鏈接網站的電子商務部分啓用HTTPS是相對的,當有人訪問http://mysite.com和點擊購買,他們被帶到http://mysite.com/buy

此外,如果他們訪問https://mysite.com/buy並點擊鏈接到另一頁,他們被帶到https://mysite.com

我只希望HTTPS的原因是因爲我有外部元素(即Google地圖,Youtube,Twitter等),無法通過https發送。

有沒有一種方法,我可以使/ buy目錄強制HTTPS,但每隔一頁強制HTTP?

編輯: 如果有人感興趣,我可以用PHP解決這個問題。我還是喜歡一個htaccess的解決方案,但這對於現在的工作:

if($_SERVER['HTTPS'] == "on") { 
    if(strpos($_SERVER['REQUEST_URI'],"buy") === false) { 
     Header("Location: http://$_SERVER['HTTP_HOST']."".$_SERVER['REQUEST_URI']"); 
    } 
} 

回答

6

在.htaccess文件試試這個:

Options +FollowSymLinks 
RewriteEngine on 

# redirect for http /buy page 
RewriteCond %{SERVER_PORT} =80 
RewriteRule ^buy/?$ https://mysite.com/buy [R=301,QSA,L,NE] 

# redirect for https non /buy pages 
RewriteCond %{SERVER_PORT} =443 
RewriteCond %{REQUEST_URI} !^/buy [NC] 
RewriteRule ^/?(.*)$ http://mysite.com/$1 [R=301,QSA,L,NE] 

R=301將HTTPS狀態重定向301
L將最後一條規則
NE是無法迴避的查詢字符串
QSA將追加現有查詢參數
NC用於忽略大小寫比較

$1是你REQUEST_URI

+0

您可以將'RewriteRule^/?(。*)$ http://mysite.com/$1 [R = 301,QSA,L,NE]'簡化爲'RewriteRule(。*)http://mysite.com$1 [R = 301,QSA,L,NE]' – elimisteve 2013-09-06 20:46:03

+0

@elimisteve:當然可以做到。 – anubhava 2013-09-06 20:50:20

0

我沒有實際操作經驗,但是從我所看到的,它看起來像htaccess的配置文件應僅影響文件存儲文件的文件夾。

所以,你應該能夠做這樣的事情:

http://www.besthostratings.com/articles/force-ssl-htaccess.html

而且把它放在你的網站的/買文件夾。

+0

謝謝你的回答。問題是/ buy是重寫的URL,所以/ buy文件夾實際上並不存在。 – Jarred 2011-04-19 17:58:49

0

如果你的網頁上9001端口託管只是讓你的Linux系統中的任何端口,使這些變化在/etc/httpd/conf.d/ssl.conf。那麼設置你的監聽端口,能夠9002和創建SSL證書和密鑰,並把下面的配置您的的httpd.conf文件

Listen 9001 
<VirtualHost *:9001> 
ServerAdmin [email protected] 
DocumentRoot /mnt/work/httpd 
<Directory "/mnt/work/httpd"> 
Options FollowSymLinks 
AllowOverride AuthConfig 
</Directory> 
    SSLEngine On 
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP 
SSLCertificateKeyFile /etc/httpd/www.test.example.com.key 
SSLCertificateFile /etc/httpd/www.test.example.com.crt 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://www.test.example.com:9002%{REQUEST_URI} 

和.htaccess文件應該是這樣的

AuthType Digest 
AuthName "Protected" 
AuthDigestProvider file 
AuthGroupFile /dev/null 
AuthUserFile /mnt/work/httpd/digest_auth 
Require user username**      
相關問題