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]

관련 정보