Apache 조건부 리디렉션 HTTP를 HTTPS로

Apache 조건부 리디렉션 HTTP를 HTTPS로

모두. 구문 문제가 있습니다. 다른 소스를 따라해 보았지만 작동하지 않습니다.

무조건적인 HTTP에서 HTTPS로의 리디렉션을 성공적으로 만들었습니다. 이동http://www.robjvargas.com, HTTPS로 마무리됩니다. 모든 것이 잘되고 좋습니다.

하지만 이제 내 인증서에는 HTTP가 필요한 것 같습니다. Let's Encrypt를 사용하고 있으므로 90일마다 갱신이 필요합니다. 리디렉션이 적용되면 테스트 실행이 실패합니다. 리디렉션을 끄면 연습 실행이 성공합니다.

그래서 인증서 갱신 트래픽을 면제하기 위해 RewriteCond를 넣으려고 했습니다.

# HTTP to HTTPS redirect
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{Request_URI} !^./acme-challenge/*
RewriteRule (.*) https://www.robjvargas.com$1 [R,L]

단지 그것은 작동하지 않습니다. 한번 보면 이마 한 대 맞을 만한 뭔가가 빠진 것 같은데 안보이네요. 위의 코드를 사용하면 HTTP에서 HTTPS로의 리디렉션이 여전히 보편적인 것처럼 보입니다. 따라서 분명히 RewriteCond는 올바르지 않습니다. URI 앞의 마침표가 잘못된 것일 수 있지만, 이를 포함하거나 포함하지 않고 모두 시도했습니다.

또한 전체 URI를 RewriteCond에 넣었지만 그것도 면제되지는 않았습니다.

나는 가깝다. 오류가 발생하지 않습니다. 의도한 조건을 결코 충족하지 못합니다.

내가 무엇을 놓치고 있나요?

답변1

하지만 이제 내 인증서에는 HTTP가 필요한 것 같습니다.

이것은 완전히 정확하지 않습니다. 개인적으로 https를 통해 갱신하고 있습니다. 그러나 이것이 작동하려면 http VirtualHost에서 관련 부분을 복사하여 https VirtualHost에서 챌린지 URI에 대한 액세스를 허용해야 합니다. 그렇게 할 수 없거나 그렇게 하고 싶지 않은 경우, 작성하기 시작한 조건부 리디렉션을 사용하여 http를 통해 작동하게 만드는 방법은 다음과 같습니다.

문제는 현재 정규 표현식이 챌린지 URI와 일치한다는 것입니다. 에 따르면아파치 문서REQUEST_URI는 /로 시작하므로 다음과 같이 챌린지 URI를 찾아야 합니다 ^\/\.well-known\/.*$. 이는 챌린지 URI(http://example.com/.well-known/acme-challenge).

모두 합쳐서 :

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^\/\.well-known\/.*$
RewriteRule (.*) https://www.robjvargas.com/$1 [R,L]

나중에 문제가 발생할 경우 다음을 사용하세요.htaccess 테스터

답변2

내 Virtualmin 서버에서는 다음 줄이 트릭을 수행했습니다.

RedirectMatch ^/(?!.well-known)(.*)$ https://phpmyadmin.example.com/$1

관련 정보