我当前的.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]
但是它不起作用。我想念什么?
答案 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
条件的替代方法。