我有一个电子商务网站,我想仅在位于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']");
}
}
答案 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**