Apache Rewrite: HTTP_HOST 대신 도메인 이름을 기반으로 규칙을 작성하는 방법은 무엇입니까?

Apache Rewrite: HTTP_HOST 대신 도메인 이름을 기반으로 규칙을 작성하는 방법은 무엇입니까?

나는 HTTP_HOST(www.domainname.com)를 기반으로 작동하는 RewriteRule을 작성했지만 도메인 이름 부분(domainname.com)만을 기반으로 작동하기를 원합니다.

더 명확히 하기 위해

폴더 구조는 /var/www/domainName.com.

Apache conf 파일에 이 규칙을 작성할 때

RewriteRule ^/js/(.*) /%{HTTP_HOST}/js/$1 [L]

/var/www/www.domainName.comwww.mydomain.com을 사용하여 사이트에 액세스합니다 . 존재하지 않는 폴더를 찾으려고 시도합니다 .

따라서 위에서 언급한 규칙을 변환하여 HTTP_HOST에서 "www"를 제거해야 합니다.

답변1

동일한 사이트를 두 곳에서 사용할 수 있게 만드는 것보다 요청을 리디렉션하는 것이 좋습니다. 트래픽을 리디렉션하려면 새 VirtualHost를 만드세요.

<VirtualHost *:80>
    ServerName www.domainName.com
    Redirect / http://domainName.com/
</VirtualHost>

또는 www의 존재를 감지하는 규칙 세트를 다른 규칙 위에 추가하십시오. 사용자를 접두사로 지정하고 리디렉션합니다.

RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule /(.*) http://%1/$1 [R,L]

리디렉션 없이 두 도메인 이름 모두에서 사이트를 원하는 경우 RewriteCond를 사용하여 도메인 이름만 가져오면 RewriteRule에서 %1로 사용할 수 있습니다.

RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*) [NC]
RewriteRule ^/js/(.*) /%1/js/$1 [L]

답변2

그렇게 할 수 있을지 의심스럽습니다. 적절한 디렉토리에 대한 링크를 만드는 것이 더 쉽지 않을까요?

ln -s yourdomain.com www.yourdomain.com

답변3

을 사용해 보셨나요 %{DOCUMENT_ROOT}?

또한 Servername가상 호스트를 디렉토리 구조에서 사용하는 것과 동일한 이름으로 설정한 경우에도 가능합니다. 예:

<VirtualHost *:80>
  DocumentRoot /var/www/domainame.com
  ServerName domainame.com
  ServerAlias www.domainame.com
</VirtualHost>

%{SERVER_NAME}그런 다음 다시 쓰기 규칙에서 사용할 수 있습니다 .

답변4

질문하신 것으로 이해합니다. 설정해 주세요.문서 루트올바른 디렉토리로:

DocumentRoot /var/www/domainName.com

관련 정보