하위 도메인은 앞에 www가 없으면 작동하지 않습니다.

하위 도메인은 앞에 www가 없으면 작동하지 않습니다.

이전에 cpanel에 하위 도메인을 설정했는데(sub.domain.com을 domain.com/sub/로 리디렉션) 갑자기 오늘 브라우저의 URL을 www.domain.com/sub/로 다시 쓰는 대신 브라우저의 URL을 다시 쓰는 것을 발견했습니다. 그냥 sub.domain.com으로 남겨두세요. 문제가 무엇인지 확신할 수 없었지만 하위 도메인을 삭제하고 cpanel에서 다시 만들기로 결정했습니다. 이제 www.sub.domain.com으로 이동해야만 액세스할 수 있습니다(sub.domain.com에서는 서버를 찾을 수 없음 오류가 발생함).

편집: 문제는 .htaccess 파일에 있는 것 같습니다. 삭제한 후 모든 것이 정상으로 돌아왔습니다. 그러나 이제 나의 새로운 문제는 .htaccess 파일을 올바르게 구성하는 방법입니다. 나는 원래 다음을 시도하고 달성하기 위해 그것을 조정했습니다.

live, stage, dev라는 세 개의 폴더가 있습니다.

1) domain.com 또는 www.domain.com에 대한 요청은 domain.com/live로 전달됩니다(그리고 사용자에게 표시되는 URL은 항상 www.domain.com으로 다시 작성됩니다).

2) Staging.domain.com 및 dev.domain.com에 대한 요청 또는 각각 domain.com/staging 및 domain.com/dev로 전달되며 사용자는 브라우저에서 staged.domain.com 또는 dev.domain.com을 봅니다. .

3) 일반적으로 모든 하위 도메인은 cpanel에 추가할 때 브라우저에서 다시 작성되지 않습니다.

내 현재 .htaccess 파일은 1번 항목을 성공적으로 수행하지만, staging.domain.com을 www.domain.com/staging 등으로 다시 작성합니다.

RewriteCond %{HTTP_HOST} !^www\.domain\.com$
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
RewriteRule ^$ /index.html

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.domain.com/$1/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/live/
RewriteRule ^(.*)$ /live/$1

답변1

원래 코드의 논리를 수정했는데 실행 가능한 작업 솔루션이 있는 것 같습니다. 제가 수행한 모든 테스트는 성공적이었습니다. 누군가 코드에 결함이 있거나 원래 질문에 제시된 조건에 맞게 최적화할 수 있는 방법을 발견하면 참여해 주시기 바랍니다. 저는 재작성 작업 경험이 거의 없습니다. 감사해요.

작업 코드:

# REDIRECTS
#
# Add www in front of all URLs except subdomains
#
RewriteCond %{HTTP_HOST} ^domain\.com$
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
RewriteRule ^$ /index.html
#
# Add forward slash at end of www URLs
#
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.domain\.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.domain.com/$1/ [R=301,L]
#
# Forward requests to live folder
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/live/
RewriteRule ^(.*)$ /live/$1

*참고: 코드의 마지막 부분이 하위 도메인 URL을 라이브 폴더로 리디렉션하지 않는 이유를 잘 모르겠습니다. 원하는 대로 작동하는데 왜 그런지 모르겠습니다 ^_^;

관련 정보