请查看/改进我的 .htaccess 非 www 到 www 重写计划

请查看/改进我的 .htaccess 非 www 到 www 重写计划

运行 WP 多站点,客户端可以使用自己的域名。效果很好 - 除非客户端不使用我的名称服务器,而只是有一个指向 WP 静态 IP 地址的 A 记录。

当客户端 DNS 拥有大量服务记录(例如 Office 365)时,有时会发生这种情况,将 DNS 留在那里会更安全。

当我控制 DNS 时,我可以将非 WWW 别名为 WWW,这让 WP 多站点非常高兴。当客户端仅使用 A 记录指针时,WP 多站点会处理传入的非 WWW 请求并进入多站点的注册页面。它确实需要“www”才能正常工作(不幸的是)。

我通过在 .htaccess 中执行以下操作来解决每个客户端问题:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*) http://www.example.com/$1 [L,R=301]
</IfModule>

到目前为止效果很好。

问题:

  1. 这种方法看起来合理吗?

  2. 考虑到我看到的问题,有没有更好的方法来处理这个问题?

  3. 如果我想让这个重写通用来处理任何传入域(只要该域才不是包括我的基本多站点域名!)——有人可以告诉我如何形成条件/规则吗?

我有点喜欢对实际域进行硬编码,因为这样可以保证不会触及任何其他内容,但我想一旦我有几百个这样的域,它可能会变得愚蠢。

答案1

当我控制 DNS 时,我可以将非 WWW 别名为 WWW,这让 WP 多站点很高兴。

不太确定您在这里所说的“别名”是什么意思,但即使您控制 DNS,大概也需要实现某种规范的非 WWW 到 WWW 重定向?

  1. 这种方法看起来合理吗?

所以,这种重定向看起来是合理的。创建额外的 VirtualHost 似乎需要做更多的工作。(?)

  1. 考虑到我看到的问题,有没有更好的方法来处理这个问题?

正如评论中提到的,客户端可以改为设置A记录www.example.com,并且只能从www子域访问该网站。但这可能是不可取的。因此,无论哪种方式,您都必须在您的终端解决域名规范化问题,这将涉及 301 重定向。

  1. 如果我想使这个重写通用来处理任何传入域(只要该域不包含我的基本多站点域名!) - 有人可以告诉我如何形成条件/规则吗?

在您的服务器配置中,您可以执行以下操作来处理任何域,但排除根据领域:

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

如果HTTP_HOST不是以 开头,www.则重定向到相同的主持人带有www.前缀。

这里您也不需要<IfModule>包装器。您已经知道服务器上启用了 mod_rewrite,但即便如此,<IfModule>只有当您的网站打算在没有 mod_rewrite 的情况下“工作”时,包装器才是必需的。

答案2

您可以只添加一个单独的虚拟主机,example.com它仅提供 301 服务,将客户端发送到www.example.com

相关内容