
다음과 같은 가상 호스트가 있습니다.
<VirtualHost *:443>
ServerName article.example.com
AliasMatch "^/(.*)" "/var/www/html/article.php"
</VirtualHost>
<VirtualHost *:443>
ServerName company.example.com
AliasMatch "^/(.*)" "/var/www/html/company.php"
</VirtualHost>
다음과 같이 모든 것을 하나의 가상 호스트 아래에 두고 싶습니다.
<VirtualHost *:443>
ServerName example.com
ServerAlias *.example.*
AliasMatch "^(article|company)\.example\.*/(.*)" "/var/www/html/$1.php"
</VirtualHost>
이것이 가능한가? 모드 재작성을 사용해야 하나요? URL을 변경하지 않고 특정 하위 도메인을 내 서버의 관련 파일에 매핑하고 싶습니다. article.example.com/test-article
에 매핑하고 싶습니다 article.php
.
답변1
AliasMatch "^(article|company)\.example\.*/(.*)" "/var/www/html/$1.php"
지시문은 AliasMatch
요청된 URL 경로(첫 번째 예에서와 같이)와 일치하지만호스트 이름(여기서 하려는 것처럼) 이와 같은 것은 일치하지 않습니다.
당신이 제안한 것처럼 확실한 선택은 mod_rewrite입니다. 예를 들어:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(article|company)\.
RewriteRule ^ /var/www/html/%1.php [L]
역 %1
참조에는 이전에서 캡처된 하위 패턴의 일치 항목이 포함되어 있습니다.조건 패턴.
/var/www/html
가 문서 루트인 경우 이는 다음에서 생략될 수 있습니다.치환문자열, 절대 파일 경로 대신 문서 루트 상대 URL 경로로 다시 작성합니다. 즉. 단순히 /%1.php
.
보다 일반적으로 만들고 해당 하위 도메인이 .php
문서 루트에 파일로 존재하는 모든 하위 도메인에 대한 요청을 다시 작성할 수 있습니다. 예를 들어:
RewriteCond %{HTTP_HOST} ^([^.]+)\.example
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^ /%1.php [L]