使用 Apache2 从 HTTPS 的域中删除“www”?

使用 Apache2 从 HTTPS 的域中删除“www”?

刚刚安装了全新的 12.04 ubuntu 服务器。

一直使用样板重定向来删除 www,但它似乎不支持 https,所以我开始四处寻找。尝试了所有我发现的方法,不知何故,http“www”删除效果很好,但 https 不会重定向。

这是我使用的内容(在 /etc/apache2/conf.d 中的 bp_rewrite.conf 文件中):

# Rewrite "www.example.com -> example.com"

<IfModule mod_rewrite.c>
  RewriteCond %{HTTP_HOST} ^www\.(.+)
  RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+)
  RewriteRule ^ http%2://%3%{REQUEST_URI} [L,R=301]
</IfModule>

有人经历过这样的事吗?

答案1

您的示例代码看起来稍微过于复杂,但与我使用的非常接近:

    RewriteCond %{HTTPS}s%{HTTP_HOST} ^(on(s)|offs).+\.(.+\..+)$
    RewriteRule ^(.*)$ http%2://%3$1 [R=301]

注意:这只会删除域名最后两部分前面的内容。因此,用户可以输入what.the.example.com,它会将其缩减为example.com。如果您的域名是example.co.uk或包含三部分的内容,则必须修改第一行的末尾以适应。

答案2

为了RewriteRule触发,两个RewriteCond指令都必须为真。

这个怎么样:

<IfModule mod_rewrite.c>
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [OR]
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]
</IfModule>

现在,只要其中一个条件保持为真(至于https://www.example.com/,只有第一个条件为真),则RewriteRule应用

相关内容