我正在尝试为某个域的所有子域(以前的重写规则未捕获)构建一个捕获所有子域的规则,并从与 .htaccess 文件位于同一文件夹中的子目录中为网站提供服务。我已经有 vhosts.conf 将所有未映射的请求发送到“playground”文件夹,我想通过简单地添加子文件夹来轻松创建新的子域。
因此,我的结构如下所示:
/var/www/playground
|-> /foo
|-> /bar
.htacces 位于 /playground 文件夹中,而 /foo 和 /bar 是独立的网站。我想http://foo.domain.com
指向 /foo 和http://bar.domain.com
/bar。
这是我的.htaccess 文件:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+).domain.com$ [NC]
RewriteCond %{REQUEST_URI} !^/%1/(.*)
RewriteRule ^(.*) /%1/$1 [L]
这应该捕获子域,将其作为子文件夹添加到 RewriteRule 中,然后在斜杠和路径信息后附加。第二个 RewriteCond 是为了防止无限循环。我的想法是第二个 RewriteCond 中的 %1 将能够捕获第一个 RewriteCond 中的捕获组。但到目前为止我还没有成功,它总是以重定向循环告终。如果我将第二个 RewriteCond 中的 %1 替换为硬编码的“foo”或“bar”,它会起作用,这让我相信您不能在 RewriteCond 中引用捕获组。是真的吗?还是我遗漏了什么?
答案1
希望我理解正确:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+).domain.com$ [NC]
RewriteCond %{REQUEST_URI} !%1
RewriteRule ^(.*)$ /%1/$1 [L]