0

我正在使用 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]

但是,其中一个 URL 不会重定向。如果我只输入 example.com ( http://example.com ),则 URL 不会重定向到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>
4

2 回答 2

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]
于 2013-04-14T00:54:59.220 回答
0

HTTPS 应该“关闭”

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [OR]
RewriteCond %{HTTPS} off
RewriteRule ^.*$ https://example.com/$0 [R,L]

因为您希望主机以 www 开头或 HTTPS 关闭。

于 2013-04-13T19:26:51.110 回答