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

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

这可以完美运行,但不是动态的。

答案1

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

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]

答案2

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

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

相关内容