Jer*_*emy 2 .htaccess https redirect
我需要能够将单个页面从标准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]
Run Code Online (Sandbox Code Playgroud)
我的问题是,一旦我访问了quote.php页面并重定向到https版本,我导航的所有其他网站页面继续使用https协议.这是一个潜在的重复内容问题,因为我现在可以通过http和https访问相同的内容.
所以我想做的是,能够做上面的重定向,然后以某种方式对除除quote.php之外的所有页面反向做同样的事情.因此,如果您尝试通过https访问它们,它将重定向到默认的http版本.
我在整个站点中使用相对URL,因此我不能简单地在https/http前缀中进行硬编码.如果可能的话,我需要能够通过.htacess这样做.
任何帮助是极大的赞赏.
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]
Run Code Online (Sandbox Code Playgroud)
回答评论:将新页面添加到conndtions只需将它们括号括起来:
RewriteCond %{HTTPS} off
RewriteRule ^(quote|contact).php$ https://domain.com/$1.php [R=301,L,QSA]
Run Code Online (Sandbox Code Playgroud)
问题2:QSA flag将当前查询字符串添加到新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]
Run Code Online (Sandbox Code Playgroud)
现在,您在安全页面上使用的所有图像,脚本......都在安全地传输.
| 归档时间: |
|
| 查看次数: |
8022 次 |
| 最近记录: |