我有一个使用 apache 通配符的开发设置,我的设置如下例所示。
- 客户有一个类似 fancy-company.org 的域名
- 我拥有一个 testing.com 域名,用于测试/声明。
- 暂存网址为 fancy-company.org.testing.com
在我的 apache 配置中我使用这个配置,效果很好。
ServerAlias *.testing.com
VirtualDocumentRoot /var/www/%-3+/public_html
匹配 (fancy-company.org).testing.com。现在我想在过程中包含 www。子域名,因为如果一些客户习惯用 www 输入他们的域名,他们会感到困惑。
所以我需要一个与 www.(fancy-company.org).testing.com 匹配的版本
ServerAlias www.*.testing.com
VirtualDocumentRoot /var/www/%2-3/public_html
域名 www.fancy-company.org.testing.com 已被 Virtualhost 捕获,但 Documentroot 未被转换,fancy-company.org
%2-3
似乎无法正常工作。
示例位于https://httpd.apache.org/docs/2.4/mod/mod_vhost_alias.html如果不涉及这个案例我就搞不清楚了。
VirtualDocumentRoot 应该与以前的设置中相同的文件夹匹配:fancy-customer.com
答案1
在您最初的配置中,您在 中使用了一个负数VirtualDocumentRoot
。这很好,因为根据文档,负数从 TLD 开始向后计数,因此无论是否使用 ,它都会匹配www
。
该域名www.fancy-company.org.testing.com
将被解释如下:
-1: com
-2: testing
-3: org
-4: fancy-company
-5: www
与您相关的部分是 -3 和 -4。但是,我们不能使用%-4.%-3
,因为点被解释为子字符串。因此,我们的最终VirtualDocumentRoot
字符串应该是:
VirtualDocumentRoot /var/www/%-4.0.%-3.0/public_html