修改我的htacess以重定向到SSL URL

时间:2018-11-30 18:49:13

标签: .htaccess ssl mod-rewrite

我当前的.htaccess如下:

Redirect 301 /~mysite-net/vlog http://www.example.net/vlog
Redirect 301 /~mysite-net/pp https://www.example.net/pp
Redirect 301 /~mysite-net/pp02 https://www.example.net/pp02
Redirect 301 /~mysite-net/pp03 https://www.example.net/pp03
Redirect 301 /~mysite-net/ http://www.example.net/

RewriteEngine On
RewriteRule ^([A-Za-z0-9]+).html$ https://www.example.net/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.*?)/?$ index.php?s=$1 [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ index\.php\?s=([^\s]*)
RewriteRule ^/?(.*?)/?$ %1?%2%3 [L,R=301]

这可以达到预期目的,所以没有问题。但是,现在我需要对其进行修改,以便它始终重定向到我网站的SSL版本。这意味着无论用户键入http还是它将始终将其重定向到https。

所以我只在底部添加了以下几行:

RewriteCond %{HTTP_HOST} ^example\.net [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.net/$1 [R,L]

但是它不起作用。我想念什么?

2 个答案:

答案 0 :(得分:2)

可能是可行的 我认为您忘了放RewriteCond %{HTTPS} !on

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

答案 1 :(得分:0)

  

所以我只在底部添加了以下几行:

RewriteCond %{HTTP_HOST} ^example\.net [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.net/$1 [R,L]

现有指令存在两个问题:

  • 您已将它们放置在文件中的错误位置-它们需要放在顶部,而不是底部。通过将它们放在文件末尾,它们只会在请求静态资源时得到处理,因为前面的指令否则会“捕获” URL。

  • 您也尝试在此指令中组合非www到www重定向,但是,在第一种情况下,您省略了OR标志,因此它将永远不会重定向对{{ 1}}。

换句话说,位于文件的顶部

http://www.example.net/foo

另一个答案中提到的RewriteCond %{HTTP_HOST} ^example\.net [NC,OR] RewriteCond %{SERVER_PORT} 80 RewriteRule (.*) https://www.example.net/$1 [R=301,L] 条件只是您的RewriteCond %{HTTPS} !on条件的替代方法。