특정 폴더에 대해 .htaccess 리디렉션을 비활성화하는 방법

특정 폴더에 대해 .htaccess 리디렉션을 비활성화하는 방법

.htaccess모든 URL을 www.a.com다음 으로 리디렉션하기 위해 다음 규칙을 작성합니다 www.b.com.

RewriteEngine on
RewriteCond %{http_host} ^www.a.com [NC,OR]
RewriteCond %{http_host} ^a.com [NC]
RewriteRule ^(.*)$ https://www.b.com/myfolder/ [R=301,NC,L]

이제 아래와 같이 하위 디렉터리 아래에 파일이 있습니다 a.com.

www.a.com/.well-known/acme-challenge/#######

AutoSSL 갱신에 사용됩니다. 위의 리디렉션을 사용하면 AutoSSL이 더 이상 파일을 찾을 수 없으므로 갱신이 실패합니다.

그렇다면 아래에서 리디렉션을 비활성화할 수 있습니까 /.well-known/acme-challenge/?

답변1

모든 것을 고정된 URL 경로로 리디렉션하므로 지시문에서 직접 예외를 작성할 수도 있습니다 RewriteRule(현재 수행 중인 것처럼 URL 경로를 캡처할 필요가 없습니다).

예를 들어:

RewriteCond %{HTTP_HOST} ^(www\.)?a\.com [NC]
RewriteRule !^\.well-known/acme-challenge/ https://www.b.com/myfolder/ [R=301,L]

접두사!RewriteRule 무늬표현식을 부정하므로 정규식이 수행되면 성공합니다.~ 아니다성냥. 이 경우 요청한 URL 경로가 시작되지 않습니다 .well-known/acme-challenge/. (단, 아래의 "극단적인 경우"를 참조하세요.)

나도 네 둘을 합쳤어정황( RewriteCond지시문)을 하나로 통합합니다. NC규칙 자체에는 플래그가 필요하지 않습니다 (Windows가 아닌 Linux를 사용한다고 가정).

정규 표현식에서 리터럴 점을 백슬래시로 이스케이프 처리하는 것을 잊지 마세요.

엣지 케이스(추가 옵션)

파일 뒷부분에 전면 컨트롤러 패턴도 있는 경우 .htaccess(예: WordPress, Joomla, 대부분의 다른 프레임워크/CMS 등)상태형식의 URL을 요청할 때 전면 컨트롤러에 대한 재작성이 리디렉션되는 것을 방지하기 위해 위 규칙을 적용합니다 /.well-known/acme-challenge/<non-existent-file>. 예를 들어:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
:

이 조건이 없으면 요청은 http://a.com/.well-known/acme-challenge/<non-existent-file>다음으로 리디렉션됩니다 https://www.b.com/index.php( index.php전면 컨트롤러라고 가정).

요약

그러면 완전한 규칙은 다음과 같습니다.

RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} ^(www\.)?a\.com [NC]
RewriteRule !^\.well-known/acme-challenge/ https://www.b.com/myfolder/ [R=301,L]

# Front-controller pattern follows...

업데이트:

리디렉션이 간단한 줄인 경우: redirect 301 / https://www.b.com/myfolder/에 대한 예외를 작성하는 방법은 무엇입니까 /.well-known/acme-challenge/?

이후단순한 Redirect(mod_alias) 지시어 자체는 "예외"를 만드는 기능을 제공하지 않으므로 표현식에서 지시어를 묶어야 합니다 <If>(Apache 2.4 필요). 예를 들어:

<If "%{REQUEST_URI} !~ m#^/\.well-known/acme-challenge/#">
    Redirect 301 / https://www.b.com/myfolder/
</If>

참조:https://httpd.apache.org/docs/2.4/expr.html

(이와 같은 지시문을 사용하는 경우 Redirect위에서 언급한 "전면 컨트롤러" 패턴과 "가장자리 사례"가 없습니다.)

곁에:유사해 보일 수 있지만 이 Redirect지시문은 이전에 사용된 지시문과 상당히 다르며 RewriteRule다른 결과를 생성합니다. RewriteRule위의 지시어폐기하다요청된 URL 경로로 모든 것을 https://www.b.com/myfolder/. 그러나 Redirect여기에 사용된 지시문은보존하다요청된 URL 경로, URL 경로 앞에 다음을 추가 /myfolder(예: /foo/bar로 리디렉션됨 https://www.b.com/myfolder/foo/bar)

관련 정보