ModRewrite with HTTPS [closed]

青春壹個敷衍的年華 提交于 2020-02-02 16:20:07

问题


I'm using the following mod rewrites to ensure not only canonical URLs, but also that the site is displayed using HTTPS:

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
// It think the problem must be here --^

RewriteCond %{HTTP_HOST} ^rto12\.ca$ [NC]
RewriteRule ^(.*)$ https://www.rto12.ca/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php?
RewriteRule ^index\.php?$ https://www.rto12.ca/ [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html?
RewriteRule ^index\.html?$ https://www.rto12.ca/ [R=301,L]

My problem comes when you try to go here: rto12.ca... The browser takes you here: `https://www.rto12.ca/https://rto12.ca/'

It's the first condition/rule that's causing this. Any suggestions would be appreciated.


回答1:


This rule:

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

...will just rewrite the request to https://rto12.ca/REQUEST_URI, and then pass it off to the next rule (the input to the next rule, which you append to the end of the request, will be https://rto12.ca/REQUEST_URI). However, for it to work properly, you need it to redirect immediately:

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

It's likely possible to combine all of your rules into at most a single redirect, so let me play around with it a bit and I'll see what I can come up with, then I'll update the answer. Adding the flags should fix your problem either way, though.

Edit: I think this should take everything in one go:

RewriteEngine On

RewriteCond %{HTTPS}        =off   [OR]
RewriteCond %{HTTP_HOST}   !^www\. [OR]
RewriteCond %{THE_REQUEST}  ^[A-Z]{3,9}\ /index\.(html|php)
RewriteCond %{HTTP_HOST}    ^(www\.)?(.+)$
RewriteRule ^(index\.(html|php))|(.*)$ https://www.%2/$3 [R=301,L]


来源:https://stackoverflow.com/questions/3659732/modrewrite-with-https

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!