我有一堆域指向同一个文件夹,我的主机“public_html”的根目录。 我希望我可以将它们重定向,每个文件夹都与域名同名。
例如:将www.mydomain.com重定向到“public_html / www.mydomain.com”
我试过了:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/%{HTTP_HOST}/.*$
RewriteRule ^(.*)$ /%{HTTP_HOST}/$1 [L]
但没有成功。怎么了? 它甚至可以重定向到名称上使用“点”的文件夹吗?
先谢谢。
答案 0 :(得分:3)
RewriteCond中的测试模式实际上是尝试匹配从 literal 字符串/%{HTTP_HOST}/
开始的输入。 %{HTTP_HOST}
变量的值不会像您期望的那样展开,因此条件将始终为真(模式本身永远不会匹配)。您需要修改RewriteCond,并且有一些不同的方法。
如果这是您执行的唯一重写,您只需检查一下是否已完成:
RewriteCond %{ENV:REDIRECT_STATUS} =""
或者,如果资源在您重写之前不存在,您可以检查它:
RewriteCond %{REQUEST_FILENAME} !-f
最后,您可以通过在测试模式中使用反向引用来模仿原始条件,以及不会出现在您的网址中的分隔符:
RewriteCond /%{HTTP_HOST}/#%{REQUEST_URI} !^([^#]+)#\1
请注意,这并不能保证您已完成重定向,但它只能确保请求URI将主机名作为其第一个路径段。但是,这通常足够好。