mod_rewrite:在另一個 RewriteRule 中使用來自 RewriteCond 的反向引用作為 CondPattern

mod_rewrite:在另一個 RewriteRule 中使用來自 RewriteCond 的反向引用作為 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]

相關內容