2012-12-17 24 views
0

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

我有一个像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来处理我的情况,或者我应该试图以某种方式混合这两种方法。

混合他们的方式去或将会产生问题?

回答

1

使用mod_vhost_alias时,RewriteRule和RewriteCond的行为会发生变化。它已经过了几天,因为我对它进行了修改,所以我对它做了简单的介绍,但要小心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的编程团队放弃了这个球。他们从来没有写过任何文件解释如何使用补丁或新变量。

我重新解决了这个问题,并声明它仍然是一个错误,因为您无法编写代码,也不会告诉任何人如何使用它,然后将其称为固定。不幸的是,这个问题在YEARS中已经被忽略了,即使它们应该为它写代码,它也可能会继续被忽略。

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

+0

我发现VirtualDocumentRoot应该为PHP正确设置DOCUMENT_ROOT变量。我不知道为什么当我测试时我没有得到预期的行为。也许我做错了什么,但阿帕奇团队声称这个问题在2012年2月得到修复。我将不得不进一步测试。目前,任何阅读此文的人都应该警告注意可能存在的问题。 – James

+0

找到了为什么DOCUMENT_ROOT没有正确设置。目前发行版稳定的apache2是v2.2.x. Debian 6和大多数发行版目前没有v2.4.x作为稳定的发行版。通过VirtualDocumentRoot的DOCUMENT_ROOT已在v2.4.x中修复,所以我的版本太旧了。我不打算从源代码构建2.4.x,因此我现在不会使用mod_vhost_alias。 – James