모든 페이지를 www가 아닌 ​​페이지로 리디렉션하고 한 페이지를 www로 리디렉션합니다.

모든 페이지를 www가 아닌 ​​페이지로 리디렉션하고 한 페이지를 www로 리디렉션합니다.

내 모든 내부 페이지(예: )를 www가 아닌 ​​버전으로 리디렉션하고 싶지만 내 홈페이지( )는 www 버전( )으로 리디렉션하고 example.com/about싶습니다 .https://example.comhttps://www.example.com

인터넷에서 많은 기사를 검색했지만 작동하지 않았습니다.

두 규칙을 모두 설정하면 내부 페이지는 잘 리디렉션되지만 홈페이지는 루프에 갇히게 됩니다.

코딩하는 방법을 모르니 .htaccess파일 에 붙여넣어야 할 코드를 작성해 주실 수 있는지 부탁드립니다.

현재 아래 코드를 사용하여 www가 아닌 ​​버전(홈페이지 포함)으로 모든 페이지를 리디렉션하도록 설정했습니다.

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
</IfModule>
# BEGIN Sitepad
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
# END Sitepad

답변1

인터넷에서 많은 기사를 검색했지만 작동하지 않았습니다.

아마도 이것은 이상한 요구 사항이기 때문일 것입니다. 이 작업을 수행하는 간단히 복사/붙여넣기할 수 있는 코드를 찾을 수 있다면 놀랄 것입니다.

그러나 모든 내부 링크에 대해 올바른 절대 URL을 구성한다고 가정하면(리디렉션하는 URL에 내부적으로 링크하면 안 되기 때문에) .htaccess기존 지시어를 이해한다면 구현하기가 비교적 쉽습니다.

RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

정규식 .*RewriteRule 무늬성냥모든 것. 특히 수량자로 표시된 대로 0개 이상의 문자와 일치합니다 *. 이는 빈 URL 경로(예: "홈페이지") 및 비어 있지 않은 모든 URL 경로(예: 기타 모든 것)와 일치합니다.

비어 있지 않은 URL 경로(예: 홈페이지를 제외한 모든 항목)와 일치하도록 위의 정규식을 변경해야 합니다. 그리고 빈 URL 경로에만 일치하는 다른 규칙(다른 방향)을 만듭니다.

index.php(이는 mod_dir이 뒤따르는 mod_rewrite 지시문이 아닌 홈페이지에 대한 요청을 제공한다는 사실을 사용합니다 .)

1개 이상(예: 비어 있지 않은 URL 경로)을 일치시키려면 (별표/별표) +대신 (더하기) 수량자를 사용할 수 있습니다.*

예를 들어:

# Redirect everything except the homepage (from www to non-www)
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.+)$ https://example.com/$1 [L,R=301]

# Redirect the homepage only (from non-www to www)
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^$ https://www.example.com/ [L,R=301]

홈페이지를 www에서 www가 아닌 ​​곳으로 리디렉션한 이전 301(영구) 리디렉션이 브라우저에 의해 캐시되었으므로 테스트하기 전에 브라우저 캐시를 지워야 합니다.

잠재적인 캐싱 문제를 방지하려면 먼저 302(임시) 리디렉션으로 테스트하세요.

관련 정보