如何删除 apache 中所有主机的 www?

如何删除 apache 中所有主机的 www?

我读过关于此事的 SO 主题。但是,它们仅适用于单个主机。

我希望对当前和未来域的所有服务器制定统一的规则。

基本上,我想从所有请求中删除 www 并仅留下可访问的域名。

Apache 也提供 HTTPS,那么如何将其应用于全部?

谢谢!

http://www.example.com >> http://example.com
https://www.example.com >> https://example.com

玛丽亚

答案1

mod_rewrite在某种程度上,您所描述的内容(似乎)不可能使用。

来自多个“级别”的配置不会堆叠mod_rewrite,因此主服务器配置中定义的规则集将不会自动导入并应用于委托给的请求<VirtualHost>

但是,假设您无论如何都必须<VirtualHost>在某个时候分配,如果您不打算在正文中制定任何其他规则<VirtualHost>(如果它们在.htaccess或某个<Directory>部分中,那就没问题),您可以尝试以下操作。

在主配置中,我们将采用我的回答这个相关问题并应用它:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|off
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$
RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]

然后,在每个<VirtualHost>部分中,我们可以使用RewriteOptions指示:

RewriteEngine On
RewriteOptions inherit

当然,您也可以简单地将规则集<VirtualHost>完整地复制到每个位置,但这会将相关规则集保存在一个位置。

请注意,我建议在<VirtualHost>这种情况下不要直接添加其他规则,因为继承的规则包含在内无论您在当前级别的配置中定义了什么,都可能会产生意想不到的副作用。

相关内容