htaccess根据主机名重定向到子目录

题: 我需要做什么规则来执行以下重定向:
[1] http://www.xyzblog.com/foo/bar.php  => htdocs/projects/xyzblog/foo/bar.php
[2] http://www.xyzblog.com/js/jquery-min.js => htdocs/js/jquery-min.js

[3] http://www.bigcommerce.ch/images/baz.png => htdocs/projects/bigcommerce/images/baz.png
[4] http://www.bigcommerce.ch/css/reset.css => htdocs/css/reset.css
在[2]和[4]中,请求的文件确实存在于原始路径中,因此不会发生重定向。 背景: 我有一个使用Apache Friend优秀XAMPP的WAMP envo。我为不同的客户处理多个项目,并设置了以下目录结构:
htdocs
  + css
  + images
  + includes
  + js
  + projects
     + bigcommerce
     + xyzblog
     ...
当我开始处理一个新项目时,我在项目下创建了一个同名的目录;此外,我在客户端的主机名后命名项目。因此,如果我开始处理生产站点为http://www.
dreamvacation.com
的项目,我会在项目目录下添加一个
dreamvacation
目录。 最后我暂时将以下行添加到
C:WINDOWSsystem32driversetc
中的
hosts
文件中
127.0.0.1   dreamvacation.com
这样,对dreamvacation.com的所有请求都将被短路到我的localhost。 我仍然需要一个组件才能在localhost上编码,并期望它在上传到生产服务器时的行为方式相同。这是一个htaccess文件,用于检查请求中的主机名是什么,并重定向到具有相同名称的目录,而不是顶级域标识符(
.com
.net
等)。只有在请求的文件不存在时才会进行重定向。最后一个条件是因为我将经常使用的文件放在
htdocs
下的目录中 - 例如我在
htdocs/js
中只有一个
jquery-min.js
而在
htdocs/css/blueprint/screen.css
中只有一个蓝图css。但是每个项目还有一个
js
css
,...子目录,但仅适用于项目特定的文件。 怎么能实现这一目标?     
已邀请:
你当然应该看看基于命名的虚拟主机。在每个客户端目录上启动目录root。这是真正的解决方案:-) 对于共享的folers,您可以在这些Virtualhost中使用“Alias”指令,以便某些目录始终以目录树中的相同位置为目标。 并使用链接共享您的共享文件夹。 无论如何,你也可以按自己的方式做。它用于Mass Virtual Hosting,其中编写成千上万的Virtualhost是一种痛苦,mode_rewrite是一个很好的替代解决方案。 要检测现有文件和目录,可以使用RewriteCond指令,并防止在文件存在时进行重写。 然后在真正的重写上,你需要重用apache变量
%{HTTP_HOST}
。所以,我没有测试它,但这样的东西应该是一个很好的起点(用户RewriteLogLevel和RewriteLog来调试),:
RewriteEngine On
RewriteBase /
RewriteCond   %{REQUEST_FILENAME} !-f
RewriteCond   %{REQUEST_FILENAME} !-d
RewriteCond   %{HTTP_HOST}                 ^www.[^.]+.com$
RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
RewriteRule   ^www.([^.]+).com(.*) /htdocs/projects/$1$2
这是基于基于用户名的域的apache文档示例,您应该查看此“大量虚拟主机”的apache文档页面以获取更多详细信息,但是一些示例包括基于文件的规则和您在开发环境中不需要的检查。记得在没有mod_rewrite的情况下使用VirtualHosts肯定更容易,但是如果你愿意,mod_rewrite可以完成所有的工作。     

要回复问题请先登录注册