如何去除所有主机在Apache的www?

我在这个问题上读了SO主题。 但是,它们只适用于单个主机。

我想为现在和将来的域名的所有服务器有一个统一的规则。

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

Apache也提供HTTPS,那么如何将这个应用到所有的?

谢谢!

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

玛丽亚

你所描述的(看起来)使用mod_rewrite是不可能的,在一定程度上。

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

然而,假设你必须在某个时刻指定<VirtualHost> ,如果你不打算在<VirtualHost>主体中有任何其他的规则(如果他们在.htaccess或者<Directory>部分)会很好),你可以玩下面的。

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

 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>中,但这会将相关规则集保留在一个位置。

请注意,我build议在这种情况下直接在<VirtualHost>没有附加规则的原因是,无论您在configuration的当前级别中定义了什么,都会包含inheritance的规则,这可能会产生意想不到的副作用。