apache2.4 mod_rewrite 특정 별명을 제외하십시오 directroy / uri


11

내 호스트 중 하나에 다음 설정이 있습니다.

...<VirtualHost *:80>
    ServerName cloud.domain.de
    ServerAdmin webmaster@domain.de
    ServerSignature Off

    Alias "/.well-known/acme-challenge" "/var/www/domain.de/vh-www/htdocs/public/.well-known/acme-challenge"

    <Directory "/var/www/domain.de/vh-www/htdocs/public/.well-known/acme-challenge">
      Require all granted
      ForceType 'text/plain'
    </Directory>

    <ifmodule mod_rewrite.c>
      RewriteEngine On
      RewriteCond %(REQUEST_URI) !/\.well\-known/acme\-challenge/?.*
      RewriteCond %{HTTPS} off
      # RewriteRule ^\.well-known/acme-challenge/([A-Za-z0-9-]+)/?$ - [L]
      RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    </ifmodule>...

내가 달성하고자하는 것은 URL http://cloud.domain.de/.well-known/acme-challenge/에 액세스 할 때 mod_rewrite가 URL을 다시 쓰지 않는다는 것 입니다.

나는 이미 다른 접근법을 시도했지만 그중 하나는 위의 주석 처리 된 RewriteRule이지만 아무것도 작동하지 않는 것 같습니다. 서버는 매번 https로 다시 씁니다.

테스트 목적으로 다시 쓰기를 비활성화하면 별칭 URL에 잘 액세스 할 수 있습니다 ...

특정 URL을 다시 작성하지 않으려면 어떻게해야합니까?

답변:


16

그렇게 :

<ifmodule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</ifmodule>

URI가 일치 start with /.well-known/acme-challenge/하면 요청이 리디렉션되지 않습니다.


먼저 조언 해 주셔서 감사합니다! 불행히도 작동하지 않았습니다. 방문 할 때 : http://www.server-plant.de/.well-known/acme-challenge/여전히 재 작성 중입니다. (저는 www-Subdomain에 동일한 Rewrrite Rules and Conditions를 적용 했으므로 클라우드 -Subdomain과 완전히 동일합니다)
FleBeling

(있었다) 대신 {의}과 : 편집 RewriteCond %{HTTPS} offrequiered되지 않는다
Froggiz

그래, 나는 괄호를 확인하지 않고 맹목적으로 당신을 복사했지만, 잘, sh .. 발생 :) 이제 매력처럼 작동하고 다른 조건에 대해서도 맞습니다. 단 하나의 질문이 남았습니다. 상태를 변경하여 후행 뒤에있는 모든 항목과 일치시키는 방법은 /무엇입니까? 그래서 index.html 등을 잡지 못합니까?
FleBeling

그것은 이미 너무 리디렉션되지 않는 모든 start with /.well-known/acme-challenge/것과 일치합니다/.well-known/acme-challenge/anything
Froggiz

1
RewriteOptions InheritDownApache 2.4.8부터 모든 가상 호스트에 다시 쓰기 구성을 상속 할 수 있습니다 . RewriteEngine On각 가상 호스트 구성에 여전히 존재해야합니다.
tobltobs

3

@mark "더 짧고 강력한"변형의 올바른 버전 :

RewriteCond %{REQUEST_URI} ^/\.well\-known
RewriteRule . - [L]

아래에 ssl 경로 재 지정 규칙을 중지하기 위해 이것을 추가하면 대단합니다
James Tan

2 행의 단일 점이 작동하지 않았습니다. 하나의 문자 만 일치하고 URL은 여러 문자로 구성되어 있습니까? 대신 ^ (. *) $를 사용하고 있습니다.
Jette

0

더 짧고 강력한 IMHO :

RewriteCond %{REQUEST_URI} ^\.well\-known
RewriteRule - [L]

/ acme-challenge /를 추가하고 싶을 수도 있지만 ./well-known/test와 같은 임의의 파일로 디버깅하려면이 솔루션이 더 효과적입니다.

실제로 수행하는 작업 : 요청이 .well-known으로 시작하는지 확인합니다.이 경우 아무 것도하지 않습니다 (-의 의미).


아니. 가상 호스트는 여전히 우선 순위가있는 것으로 보입니다. "<VirtualHost> 섹션 내의 섹션은 가상 호스트 정의 외부의 해당 섹션 뒤에 적용됩니다. 그러면 가상 호스트가 기본 서버 구성을 대체 할 수 있습니다." 에서 httpd.apache.org/docs/current/sections.html
프레드릭 노르
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.