mod_rewrite:使用RewriteCond的反向引用作为另一个RewriteRule中的CondPattern

我尝试使用fqdn的第一部分作为重写目标:

http://demo.dev.example.com/something= > http://demo.dev.example.com/demo/something

RewriteCond %{HTTP_HOST} ^([a-z0-9-]+).dev.example.com [NC] RewriteRule ^/(.*) http://%1.dev.example.com/%1/$1 [P] 

这创造了一个无限循环。 所以我需要另一个条件来检查这个请求是否已被重写:

 RewriteCond %{REQUEST_URI} !^/%1 

那么这是行不通的,文档没有提到在CondPatterns中使用反向引用,大多数情况下不支持。

 RewriteCond %{REQUEST_URI} !^/demo 

这完美的作品,但不是dynamic的。

解决scheme/解决方法:为内部请求保留一个主机名部分:

 RewriteCond %{HTTP_HOST} !^internal.dev.atizo.org [NC] RewriteCond %{HTTP_HOST} ^([0-9a-z-]+).dev.atizo.org [NC] RewriteRule ^/(.*) http://internal.dev.atizo.org/%1/$1 [P] 

如果重写后不需要处理任何规则,只需在方括号中添加“L”=“last”选项:

RewriteRule ^/(.*) http://%1.dev.example.com/%1/ $1 [P,L]