2011-03-19 81 views
0

我试过了我的限制。 Mod_rewrite就是这样的噩梦。我最后一次尝试的是下面的代码,即使使用www.water.com工作,我也无法让www.wind.com做同样的事情。 在mod_rewrite日志中,我得到的是www.wind.com(HTTP_HOST),它始终与www.water.com进行比较。重写从未到达第二组线。有人可能知道如何做到这一点?将多个域指向不同的文件夹

RewriteEngine On 
---------------------------------------------------------- 
RewriteCond %{HTTP_HOST} (www\.)?water\.com [NC] 
RewriteCond %{REQUEST_URI} !^/zend/application/Water/ [NC] 

# Excludes the redirection for files that physically exist (-s); symbolic links (-); and existing directories (-d). 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 

RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ /water.php [NC,L] 
---------------------------------------------------------- 
RewriteCond %{HTTP_HOST} (www\.)?wind\.com [NC] 
RewriteCond %{REQUEST_URI} !^/zend/application/Wind/ [NC] 

# Excludes the redirection for files that physically exist (-s); symbolic links (-); and existing directories (-d). 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 

RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ /wind.php [NC,L] 
---------------------------------------------------------- 
+2

是否有任何理由为什么你想用mod_rewrite来做到这一点,而不是修改你的主机上的域指向你想要在服务器上的文件夹? – Jason 2011-03-19 07:33:08

+0

不确定,因为我正在使用zf,并试图将zf应用程序分离到它自己的文件夹结构中,并且不显示任何子文件夹是我指示的。简而言之,原因正是标题所说的。我只有没有mod_rewrite或服务器管理技能来找出最好的方法。 – 2011-03-19 07:38:22

+0

的确,在我看来,这在主机层面处理得更好。 – 2011-03-19 07:48:16

回答

2

对于水组,您有两个RewriteRules后面的RewriteConds序列。第一个RewriteRule是基于RewriteConds的结果有条件地应用的。

但是不会将第二个RewriteRule应用到所有剩余的请求中,甚至请求到域wind.com?考虑请求:

http://wind.com/mycontroller/myaction

它将失败的水全部RewriteConds,但随后被得到回升:

RewriteRule ^.*$ /water.php [NC,L]

不是吗?

在任何情况下,似乎在主机级别处理这个问题似乎更好。听起来你想要为每个域提供完全不同的ZF应用程序,每个域都存放在它自己的文件夹中,没有跨应用程序共享(除了可能的外部库)。在这种情况下,只需将主机级别的域映射到不同的文件夹即可。

+0

好的。我会小心翼翼地尝试。知道继续前进,我只是非常疲倦。但你完全明白这个主意。谢谢你的解释! – 2011-03-19 08:05:34

+0

在当地做过。只是不知道我是否可以在遥控器上实现相同的功能,因为我无法访问虚拟主机。我会在睡好之后看到它。 – 2011-03-19 09:02:50

+0

我见过的大多数主机允许您在一个托管帐户内托管多个域 - 即使是共享主机 - 也仍然允许您指定要从哪个文件夹中为每个域提供服务。不需要明确访问vhost;他们通常会在内部处理并为您提供像Cpanel,Plesk等管理界面。我怀疑您可以将它们分开。干杯! – 2011-03-19 10:24:12

1
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 

RewriteCond %{HTTP_HOST} (www\.)?water\.com [NC] 
RewriteCond %{REQUEST_URI} !^/zend/application/Water/ [NC] 
RewriteRule ^.*$ /water.php [NC,L] 

RewriteCond %{HTTP_HOST} (www\.)?wind\.com [NC] 
RewriteCond %{REQUEST_URI} !^/zend/application/Wind/ [NC] 
RewriteRule ^.*$ /wind.php [NC,L] 

这应该工作IMO。