mod_rewrite: 別の RewriteRule の CondPattern として RewriteCond からのバック参照を使用する

mod_rewrite: 別の RewriteRule の CondPattern として RewriteCond からのバック参照を使用する

FQDN の最初の部分を書き換えターゲットとして使用してみます。

http://demo.dev.example.com/何か=>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

解決策/回避策: 内部リクエスト用にホスト名の部分を 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]

関連情報