【问题标题】:htaccess to redirect to a sub-directory based on the host namehtaccess 根据主机名重定向到子目录
【发布时间】:2011-01-26 16:55:18
【问题描述】:

问题:

执行以下重定向需要什么规则集:

[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 环境。我为不同的客户处理多个项目,并设置了以下目录结构:

htdocs
  + css
  + images
  + includes
  + js
  + projects
     + bigcommerce
     + xyzblog
     ...

当我开始处理一个新项目时,我会在项目下创建一个同名目录;此外,我以客户端的主机名命名项目。因此,如果我开始从事生产站点为http://www.dreamvacation.com 的项目,我会在项目目录下添加一个dreamvacation 目录。

最后我暂时在C:\WINDOWS\system32\drivers\etc我的hosts文件中添加以下行

127.0.0.1   dreamvacation.com

这样,对 dreamvacation.com 的所有请求都会短路到我的本地主机。

我仍然需要一个组件才能在 localhost 上进行编码,并希望它在上传到生产服务器时表现相同。这是一个 htaccess 文件,用于检查请求中的主机名并重定向到具有相同名称但没有顶级域标识符(.com.net 等)的目录。仅当请求的文件不存在时才应进行重定向。最后一个条件是因为我将经常使用的文件放在htdocs 下的目录中——例如我在htdocs/js 中只有一个jquery-min.js,在htdocs/css/blueprint/screen.css 中只有一个蓝图css。但是,每个项目也有一个 jscss、... 子目录,但仅适用于项目特定的文件。

如何做到这一点?

【问题讨论】:

标签: apache .htaccess redirect performance development-environment


【解决方案1】:

您当然应该看看named based virtualhosts。在每个客户端目录上启动目录根。这是真正的解决方案:-)

对于您的共享文件夹,您可以在这些 Virtualhost 中使用“Alias”指令,以便某些目录始终以目录树上的相同位置为目标。 并使用链接共享您的共享文件夹。

无论如何,您也可以按照自己的方式进行。它用于 Mass Virtual Hosting,在这种情况下编写数千个 Virtualhosts 很痛苦,mode_rewrite 是一个很好的替代解决方案。

要检测现有文件和目录,您可以使用 RewriteCond 指令并在文件存在时防止重写。 然后在 real 重写时,您需要重用 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 文档示例,用于基于用户名的域,您应该查看 this apache doc page 以获取更多详细信息,但其中一些示例包括基于文件的规则和检查你不需要在你的开发环境中。请记住,在没有 mod_rewrite 的情况下使用 VirtualHosts 肯定更容易,但如果你愿意,mod_rewrite 可以做任何事情。

【讨论】:

  • 谢谢 regilero。我更喜欢 htaccess,因为它会一劳永逸地处理它。这样,我需要做的就是将主机名添加到主机文件中,这既简单又快捷。
猜你喜欢
  • 2018-01-12
  • 1970-01-01
  • 2021-04-04
  • 2017-06-26
  • 1970-01-01
  • 2016-10-24
  • 2016-09-23
  • 2016-11-22
  • 2019-02-19
相关资源
最近更新 更多