여러 하위 도메인이 있는 Apache AliasMatch

여러 하위 도메인이 있는 Apache AliasMatch

다음과 같은 가상 호스트가 있습니다.

<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]

관련 정보