Apache 가상 호스트에서 전체 도메인을 다른 도메인의 단일 페이지로 리디렉션

Apache 가상 호스트에서 전체 도메인을 다른 도메인의 단일 페이지로 리디렉션

전체 도메인을 다른 도메인으로 리디렉션하는 방법에 대한 많은 정보가 있지만 도메인을 두 번째 도메인의 특정 페이지로 리디렉션하는 방법에 대한 답변을 찾을 수 없습니다. 이것이 내가 설정한 것입니다:

<VirtualHost *:80>
    ServerName www.domain2.org.uk
    ServerAlias domain2.org.uk domain1.co.uk www.domain1.co.uk
    DocumentRoot /var/www/html
    ErrorLog logs/mkt-error_log
    CustomLog logs/mkt-access_log common
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !domain1.co.uk$ [NC]
    RewriteRule ^(.*)$ https://www.domain2.org.uk/specific-page/ [L,R=301]
</VirtualHost>

이렇게 하면 리디렉션되지만 domain2의 기본 페이지로만 이동됩니다. 특정 페이지로 이동하도록 하려면 어떻게 해야 합니까?

답변1

RewriteRule ^(.*)$ https://www.domain2.org.uk/specific-page/ [L,R=301]

이는 이미 필요한 작업을 수행하고 리디렉션합니다.모든 것https://www.domain2.org.uk/specific-page/-에 명시된 바와 같이RewriteRule 치환. (비록RewriteRule 무늬불필요하게 역참조를 캡처하고 있습니다.)

RewriteCond %{HTTP_HOST} !domain1.co.uk$ [NC]

그러나 (예시된 코드 조각의 오타가 아닌 한) 조건(헤더가 다음을 Host수행하는지 확인)~ 아니다로 끝나면 domain1.co.uk리디렉션 루프가 발생합니다( domain2.org.uk분명히~ 아니다 domain1.co.uk이므로 조건은 항상 만족됩니다.) 그리고 다음 RewriteRule리디렉션모든 것.

그만큼조건 패턴RewriteCond지시문은 다음 중 하나에 의해 변경되어야 합니다.

  • (부정) 접두사를 제거합니다 !. (후행은 $점으로 끝나는 FQDN에 여전히 문제를 일으킬 수 있지만)
  • 또는 다음으로 변경하세요.!domain2\.org\.uk$

하지만... 분명히 서버 구성에 대한 액세스 권한이 있고 다른 작업 환경에서 작업하고 있기 때문에가상호스트컨텍스트에 따라 실제로 mod_rewrite를 사용해서는 안 됩니다. 하나는 domain1, 다른 하나는 별도의 가상 호스트를 생성하고 대신 domain2mod_alias RedirectMatch지시어를 사용해야 합니다. 오류가 덜 발생하고 더 효율적입니다.

예를 들어:

<VirtualHost *:80>
    ServerName domain1.org.uk
    ServerAlias www.domain1.org.uk
    RedirectMatch 301 ^ https://www.domain2.org.uk/specific-page/
</VirtualHost>

<VirtualHost *:80>
    ServerName domain2.org.uk
    ServerAlias www.domain2.org.uk
    DocumentRoot /var/www/html
    ErrorLog logs/mkt-error_log
    CustomLog logs/mkt-access_log common
</VirtualHost>

주의: 이러한 가상 호스트는 HTTP(포트 80) 전용이므로 당연히 HTTPS(포트 443)에 대해 이 리디렉션을 반복해야 합니다.

관련 정보