
전체 도메인을 다른 도메인으로 리디렉션하는 방법에 대한 많은 정보가 있지만 도메인을 두 번째 도메인의 특정 페이지로 리디렉션하는 방법에 대한 답변을 찾을 수 없습니다. 이것이 내가 설정한 것입니다:
<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
, 다른 하나는 별도의 가상 호스트를 생성하고 대신 domain2
mod_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)에 대해 이 리디렉션을 반복해야 합니다.