![使用 Apache2 从 HTTPS 的域中删除“www”?](https://linux22.com/image/591108/%E4%BD%BF%E7%94%A8%20Apache2%20%E4%BB%8E%20HTTPS%20%E7%9A%84%E5%9F%9F%E4%B8%AD%E5%88%A0%E9%99%A4%E2%80%9Cwww%E2%80%9D%EF%BC%9F.png)
刚刚安装了全新的 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
应用