如何仅在具有htaccess的某些页面上启用https?

时间:2011-04-19 17:47:43

标签: .htaccess ssl https

我有一个电子商务网站,我想仅在位于https://mysite.com/buy的网站的电子商务部分启用https

由于我网页上的所有链接都是相对的,当有人访问http://mysite.com并点击“购买”时,他们会被带到http://mysite.com/buy

此外,如果他们访问https://mysite.com/buy并点击指向其他网页的链接,则会转到https://mysite.com

我之所以只想在这一部分使用https是因为我有无法通过https发送的外部元素(即谷歌地图,Youtube,Twitter等)。

有没有办法用htaccess我可以使/ 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']");
    }
}

3 个答案:

答案 0 :(得分: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将重定向,状态为301 L将制定最后一条规则 NE表示没有转义查询字符串
QSA会附加您现有的查询参数
NC用于忽略大小写比较

$1是你的REQUEST_URI

答案 1 :(得分:0)

我没有实践经验,但从我看到的情况来看,htaccess配置文件看起来应该只影响存储文件的文件夹中的文件。

所以你应该可以这样做:

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

并将其放在您网站的/ buy文件夹中。

答案 2 :(得分:0)

如果您的网页托管在9001端口,只需启用Linux机器上的任何端口并在/etc/httpd/conf.d/ssl.conf中进行这些更改。然后将您的侦听端口设置为9002并创建SSL证书并在 httpd.conf 文件中键入并放置以下配置

Listen 9001
<VirtualHost *:9001>
ServerAdmin root@localhost
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**