![mod_rewrite 不适用于 Apache2 中的子域名](https://linux22.com/image/535042/mod_rewrite%20%E4%B8%8D%E9%80%82%E7%94%A8%E4%BA%8E%20Apache2%20%E4%B8%AD%E7%9A%84%E5%AD%90%E5%9F%9F%E5%90%8D.png)
我在使用 mod_rewrite 时遇到了一些问题。因此,我通过 .htaccess 来实现它,我可以让它在我的主虚拟主机 domain.com 上运行 - 我想要它执行的是重写http://domain.com
以强制执行https://domain.com
,它做得很好。我希望为一个 IP 设置基于名称的虚拟主机,并进行以下重定向:
http://domain.com --> https://domain.com http://staging.domain.com --> https://staging.domain.com http://test.domain.com --> https://test.domain.com http://beta.domain.com --> https://beta.domain.com
domain.com
重定向到https://domain.com
,但 staging.domain.com 不会,尽管我可以访问https://staging.domain.com
。两者的 .htaccess 相同,只是域名不同。它似乎根本没有对 staging.domain.com 进行任何重写,我已通过尝试将其重写为 www.google.com 对此进行了测试。
我有一个通配符 DNS 记录,*.domain.com,它指向域 IP。
是否有特定方法可以配置虚拟主机以允许这样做?
我一直在 Apache 文档中读到它不支持多个基于 SSL 名称的虚拟主机。但我可以访问两者,https://domain.com
而且https://staging.domain.com
一切正常。
有什么想法吗?感谢大家的帮助。
答案1
您有“NameVirtualHost”指令吗?您是否在 vhost 配置中使用了它们?
此外请看一下这个:http://wiki.apache.org/httpd/NameBasedSSLVHosts
如果两个 SSL 域都在同一个 IP 上运行,则只会使用一种加密(证书),并且“客户端将收到证书不匹配警告,并容易受到中间人攻击”。
答案2
RewriteEngine 既可以全局启用,也可以在每个虚拟主机上启用。即使全局启用,默认情况下选项也不会带入虚拟主机。您可能只需要在当前虚拟主机中将其重新打开。 RewriteEngine on
(也可能RewriteOptions inherit
,取决于您的配置)在每个虚拟主机中。