mod_rewrite:重定向到与domain同名的文件夹

时间:2010-11-27 02:40:48

标签: mod-rewrite redirect

我有一堆域指向同一个文件夹,我的主机“public_html”的根目录。 我希望我可以将它们重定向,每个文件夹都与域名同名。

例如:将www.mydomain.com重定向到“public_html / www.mydomain.com”

我试过了:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/%{HTTP_HOST}/.*$
RewriteRule ^(.*)$  /%{HTTP_HOST}/$1 [L]

但没有成功。怎么了? 它甚至可以重定向到名称上使用“点”的文件夹吗?

先谢谢。

1 个答案:

答案 0 :(得分:3)

RewriteCond中的测试模式实际上是尝试匹配从 literal 字符串/%{HTTP_HOST}/开始的输入。 %{HTTP_HOST}变量的值不会像您期望的那样展开,因此条件将始终为真(模式本身永远不会匹配)。您需要修改RewriteCond,并且有一些不同的方法。

如果这是您执行的唯一重写,您只需检查一下是否已完成:

RewriteCond %{ENV:REDIRECT_STATUS} =""

或者,如果资源在您重写之前不存在,您可以检查它:

RewriteCond %{REQUEST_FILENAME} !-f

最后,您可以通过在测试模式中使用反向引用来模仿原始条件,以及不会出现在您的网址中的分隔符:

RewriteCond /%{HTTP_HOST}/#%{REQUEST_URI} !^([^#]+)#\1

请注意,这并不能保证您已完成重定向,但它只能确保请求URI将主机名作为其第一个路径段。但是,这通常足够好。