我正在使用SSL证书运营网站。
为了优化我的SEO,我想将所有CNames重定向到https://example.com。
同一地址有4种变体: https://example.com https://www.example.com http://example.com http://www.example.com
这段代码几乎可以运作:
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [OR]
RewriteCond %{HTTPS} =on
RewriteRule ^.*$ https://example.com/$0 [R,L]
但是,其中一个网址不会重定向。如果我只输入example.com(http://example.com),则网址不会重定向到https://example.com。
有人可以帮我解决上面的代码来纠正这个问题吗?
回应乔恩的回答。我将代码片段添加到现有的.htaccess文件中。由于我不熟悉.htaccess,我想知道该代码片段周围的代码是否导致了重定向循环?
以下是.htaccess文件,其中包含以下代码段:
<IfModule mod_rewrite.c>
RewriteEngine On
# Installation directory
RewriteBase /
# Protect application and system files from being viewed
RewriteRule ^(application|modules|system|tests|sql) - [F,L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php?kohana_uri=$0 [L,QSA]
#redirect CNames to non www
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [OR]
RewriteCond %{HTTPS} off
RewriteRule ^.*$ https://example.com/$0 [R,L]
</IfModule>
答案 0 :(得分:1)
这是另一种选择:
# http www and non-www to https non-www
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} (?:www\.)?(.*) [NC]
RewriteRule ^(.*) https://%1/$1 [R=301,L]
# https www to non-www
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*) https://%1/$1 [R=301,L]
我想这段代码的最佳位置低于RewriteBase /
指令。
如果存在循环,则前一代码几乎不会生成循环。也许按照第二条规则,您可以尝试添加条件,如下所示:
# Add next line before the rule
RewriteCond %{REQUEST_URI} !index\.php [NC]
# Current rule
RewriteRule .* index.php?kohana_uri=$0 [L,QSA]
答案 1 :(得分:0)
HTTPS应该“关闭”
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [OR]
RewriteCond %{HTTPS} off
RewriteRule ^.*$ https://example.com/$0 [R,L]
因为您希望主机以www或HTTPS开头为OFF。