我试过了极限。 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]
----------------------------------------------------------
答案 0 :(得分:2)
对于水组,在RewriteConds序列之后有两个RewriteRules。第一个RewriteRule是根据RewriteConds的结果有条件地应用的。
但第二个RewriteRule不会应用于所有剩余请求,甚至是对域wind.com
的请求吗?考虑以下请求:
http://wind.com/mycontroller/myaction
所有的RewriteConds都会失败,但接下来会被接受:
RewriteRule ^.*$ /water.php [NC,L]
不是吗?
在任何情况下,似乎在托管级别更好地处理。听起来你想要为每个域提供完美不同的ZF应用程序,每个应用程序驻留在自己的文件夹中,没有跨应用程序共享(除了可能的外部库)。在这种情况下,只需将域名(在托管级别)映射到不同的文件夹。
答案 1 :(得分: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。