【问题标题】:redirect https non-www to www将 https 非 www 重定向到 www
【发布时间】:2024-01-13 08:24:01
【问题描述】:

我要重定向:

https://example.com => https://www.example.com [不工作]

http://example.com => https://www.example.com [不工作]

www.example.com => https://www.example.com [工作中]

example.com => https://www.example.com [工作中]

.htaccess

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(.*)$  [NC]
RewriteRule (.*) https://www.example.com/$1 [R=301,L]

虚拟主机

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/test/public_html
    ErrorLog /var/www/test/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost _default_:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/test/public_html
    ErrorLog /var/www/test/error.log
    SSLEngine on
    SSLCertificateKeyFile /etc/apache2/ssl/test.key
    SSLCertificateFile /etc/apache2/ssl/test.crt
</VirtualHost>

【问题讨论】:

  • @anubhava:我在虚拟主机设置中使用相同的 documentroot。请查看更新后的问题。
  • @SeanBright:我也尝试了该解决方案。首先它重定向到 www,然后再次返回到非 www,在这种情况下得到 DNS_PROBE_FINISHED_NXDOMAIN 错误。
  • 你想用RewriteCond %{HTTP_HOST} ^(.*)$ [NC]实现什么? https 必须关闭或主机不以 www 开头并且必须包含任何字符?
  • First it's redirecting to www and then again coming back to non-www:上面显示的规则中没有发生这种情况。您是否还有其他导致此问题的代码/规则?

标签: apache .htaccess


【解决方案1】:

我通过这个.htaccess 配置工作:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

【讨论】: