0

Apache2 文档建议将 mod_rewrite 作为最后的手段,用于指定将给定主机请求发送到哪个目录。他们说使用 mod_vhosts_alias。我设置了它并且它的工作没有问题。但是,我有一个需要一些 mod_rewriting 的特定案例。

我有一个像 mydomain.com 这样的域和大量像 sub.mydomain.com 和 sub2.mydomain.com 这样的子名称。这些子域都映射到相应的目录。但子域也将具有映射到各自目录的完整顶级域。例如:

sub.mydomain.com 将映射到与 awesomeproducts.com 相同的目录 sub2.mydomain.com 将映射到与 widgets.com 相同的目录

确保这两种访问每个站点的方法都能正常工作而不会发生冲突的最佳方法是什么?

由于文档只说 mod_rewrite 不像 mod_vhosts_alias 那样“优雅”,我不知道我是否应该完全单独使用 mod_rewrite 来适应我的情况,或者我是否应该尝试以某种方式混合这两种方法。

混合它们是可行的方式还是会产生问题?

4

1 回答 1

1

RewriteRule 和 RewriteCond 的行为在使用 mod_vhost_alias 时会发生变化。自从我修改它已经有几天了,所以我对它粗略,但要注意 RewriteRule 解释要重写的 URL 部分的方式。使用 mod_vhost_alias... 时可能会发生变化,并且 RewriteCond 的行为也可能会发生变化。

为了完成我所问的问题,我最终对实际域使用了符号链接。我设置了一堆带有关联文件夹的子域,这样 sub1.stddomain.com 就会转到文件夹 sub1.stdomain.com。然后我添加了一个将 domain1.com 映射到 sub1.stddomain.com 文件夹的符号链接。这样,任何访问 domain1.com 的人都会在 sub1.stddomain.com 文件夹中显示该站点。

重要提示:在所有这些工作和测试之后,我最终回到了没有 mod_vhost_alias 的虚拟主机文件集合。原来 mod_vhost_alias 存在一个已知问题。DocumentRoot 使用时未正确设置。这会破坏大量脚本。它在 2012 年 2 月用新的特殊变量进行了修补,而 Apache 的编程团队丢球了。他们从未写过任何解释如何使用补丁或新变量的文档。

我重新打开了这个问题并表示它仍然是一个错误,因为你不能编写代码,也不能告诉任何人如何使用它,然后称之为修复。不幸的是,这个问题已经被忽略了好几年,即使他们应该为它编写代码,它也可能会继续被忽略。

所有这些的推荐教训:不要使用 mod_vhost_alias。使用另外一个模板文件编写 shell 脚本来管理您的虚拟主机文件。

于 2012-12-26T07:53:08.300 回答