.htaccess를 사용하여 HTTP_HOST가 포함된 URL로 리디렉션하려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/72458

문제

문제

일부 짧은 편의 URL을 더 긴 실제 URL로 리디렉션해야 합니다.문제의 사이트는 하위 도메인 세트를 사용하여 개발 버전 또는 라이브 버전 세트를 식별합니다.

각 호스트에 대해 사용자 정의 .htaccess 파일을 생성할 필요가 없도록 특정 요청이 리디렉션되는 URL에 HTTP_HOST를 포함하고 싶습니다.

호스트별 예(.htaccess 파일에서 발췌)

Redirect /terms http://support.dev01.example.com/articles/terms/

이 예제는 dev01.example.com에서 실행되는 개발 버전에서 제대로 작동합니다.dev02.example.com에서 실행되는 개발 버전의 기본 .htaccess 파일에 동일한 줄을 사용하면 결국 잘못된 위치로 리디렉션됩니다.

이상적인 규칙(올바른 구문이 확실하지 않음)

Redirect /terms http://support.{HTTP_HOST}/articles/terms/

이 규칙은 작동하지 않으며 단지 제가 달성하고자 하는 것의 예일 뿐입니다.그러면 다양한 호스트에서 똑같은 규칙을 사용하여 올바른 결과를 얻을 수 있습니다.

답변?

  • mod_alias를 사용하여 이를 수행할 수 있습니까? 아니면 더 복잡한 mod_rewrite가 필요합니까?
  • mod_alias 또는 mod_rewrite를 사용하여 이를 어떻게 달성할 수 있습니까?가능하다면 mod_alias 솔루션을 선호합니다.

설명

나는 같은 서버에 머물지 않습니다.내가 좋아하는 것:

example.com과 dev.example.com 모두의 .htaccess 파일에서 동일한 규칙을 사용할 수 있기를 바랍니다.이 상황에서는 요청이 리디렉션되는 URL에서 문자 그대로 HTTP_HOST를 지정하는 대신 변수로 참조할 수 있어야 합니다.

제안된 대로 HTTP_HOST 매개변수를 조사하겠지만 작동하는 예제를 기대하고 있습니다.

도움이 되었습니까?

해결책

이상하게도 아무도 실제로 해본 적이 없다. 일하고 있는 답변 (웃음):

RewriteCond %{HTTP_HOST} support\.(([^\.]+))\.example\.com
RewriteRule ^/terms http://support.%1/article/terms [NC,QSA,R]

작업을 더 빠르게 수행하는 데 도움이 되도록 제가 가장 좋아하는 정규 표현식 확인 도구는 다음과 같습니다.

http://www.quanetic.com/Regex (preg(PCRE) 대신 ereg(POSIX)를 선택하는 것을 잊지 마세요!)

URL을 확인하고 유효한지 확인하고 싶을 때 이 도구를 사용합니다.

다른 팁

HTTP_HOST 값을 캡처한 다음 이를 다시 쓰기 규칙에 사용하고 싶을 것입니다.

RewriteCond %{HTTP_HOST} (.*)
RewriteRule ^/terms http://support.%1/article/terms [NC,R=302]

귀하의 질문을 올바르게 이해했다면 301 리디렉션(브라우저에게 다른 URL로 이동하라고 지시)을 원할 것입니다.내 솔루션이 귀하에게 적합하지 않은 경우 다음 도구를 사용해 보십시오. http://www.htaccessredirect.net/index.php 그리고 무엇이 당신에게 적합한지 알아보세요.

//301 Redirect Entire Directory
RedirectMatch 301 /terms(.*) /articles/terms/$1

//Change default directory page
DirectoryIndex 

이 치트시트에 따르면( http://www.addbytes.com/download/mod_rewrite-cheat-sheet-v2/png/ ) 이것이 작동해야합니다

RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain2.com/$1

이것을 테스트할 방법이 없으므로 이는 명시적인 답변이 아닌 올바른 방향을 가리키는 포인터로 간주되어야 합니다.

동일한 서버에 머무르는 경우 이를 .htaccess에 넣으면 서버에 관계없이 작동합니다.

RedirectMatch 301 ^/terms$ /articles/terms/

생산물:

http://example.com/terms -> http://example.com/articles/terms

또는:

http://test.example.com/terms -> http://test.example.com/articles/terms

분명히 REGEX 매칭 등을 조정하여 그것이 던질 내용에 대처할 수 있는지 확인해야 합니다.301의 경우에도 마찬가지입니다. 브라우저가 리디렉션을 캐시하는 것을 원하지 않으면 302를 원할 수 있습니다.

네가 원한다면:

http://example.com/terms -> http://server02.example.com/articles/terms

그런 다음 HTTP_HOST 매개변수를 사용해야 합니다.

이 정보는 포함할 필요가 없습니다.루트에 상대적인 URI를 제공하기만 하면 됩니다.

Redirect temp /terms /articles/terms/

이에 대한 설명은 다음과 같습니다. mod_alias 문서:

새 URL은 구성표와 호스트 이름으로 시작하는 절대 URL이어야 하지만 슬래시로 시작하는 URL 경로를 사용할 수도 있습니다. 이 경우 현재 서버의 구성표와 호스트 이름이 추가됩니다.

실제로 필요한 것은 별칭일 뿐인 것 같나요?

Alias /terms /www/public/articles/terms/
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top