我需要能够将单个页面从标准http重定向到https。例如,我想从http://domain.com/quote.php转到https://domain.com/quote.php。
到目前为止,我在.htaccess文件中使用此代码,并且它正在用于初始重定向。
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^quote.php https://domain.com/quote.php [R=301,L]
我的问题是,一旦我访问了quote.php页面并被重定向到https版本,我导航的所有其他网站页面继续使用https协议。这是一个潜在的重复内容问题,因为我现在可以通过http和https访问相同的内容。
所以我想做的是,能够做上面的重定向,然后以某种方式对除除quote.php之外的所有页面反向做同样的事情。因此,如果您尝试通过https访问它们,它将重定向到默认的http版本。
我在整个网站中使用相对URL,因此我不能简单地在https / http前缀中进行硬编码。如果可能的话,我需要能够通过.htacess这样做。
非常感谢任何帮助。
答案 0 :(得分:8)
RewriteCond %{HTTPS} off
RewriteRule ^quote.php$ https://domain.com/quote.php [R=301,L,QSA]
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/quote.php
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L,QSA]
回答评论: 用于向conndtions添加新页面只需将它们括号括起来:
RewriteCond %{HTTPS} off
RewriteRule ^(quote|contact).php$ https://domain.com/$1.php [R=301,L,QSA]
问题2:QSA
标志将当前查询字符串添加到新URL。默认情况下会发生这种情况,除非您更改查询字符串。您现在可以安全地删除它们,但如果您添加了查询字符串,并且想要使用旧字符串,请将其放回去。
编辑2:
上面的代码有一点安全问题:(实际上它不止一点:-D。
当您使用https
传输html代码并且页面使用相对路径时,这很好。但是当你将这些代码放在.htaccess
中时,它们会变成http
而这就是问题:-)。把下面的代码放在一起来解决问题:):
RewriteCond %{HTTPS} off
RewriteRule ^(quote|contact).php$ https://domain.com/$1.php [R=301,L,QSA]
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/(quote|contact).php
RewriteCond %{REQUEST_URI} !^/(.*)\.(css|png|js|jpe?g|gif|bmp)$
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L,QSA]
现在,您在安全页面上使用的所有图像,脚本......都在安全地传输。