apache2.4 mod_rewrite excluir alias específico directroy / uri

11

Eu tenho a seguinte configuração em um dos meus vhosts:

...<VirtualHost *:80>
    ServerName cloud.domain.de
    ServerAdmin [email protected]
    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>...

O que eu quero alcançar é que o mod_rewrite não reescreve o URL quando o URL http://cloud.domain.de/.well-known/acme-challenge/é acessado.

Eu já tentei abordagens diferentes, uma delas sendo a RewriteRule comentada acima, mas nada parece funcionar: o servidor a reescreve para https toda vez.

Quando desativo a reescrita para fins de teste, posso acessar a URL do alias perfeitamente ...

Como faço para conseguir que o URL específico não seja reescrito?

FleBeling
fonte

Respostas:

16

Curtiu isso :

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

Se o URI corresponder, start with /.well-known/acme-challenge/a solicitação não será redirecionada

Froggiz
fonte
Primeiro, obrigado pelo seu conselho! Infelizmente, não funcionou. Quando você visita: http://www.server-plant.de/.well-known/acme-challenge/ainda está sendo reescrito. (I aplicadas as mesmas regras e condições Rewrrite para o meu www-subdomínio, por isso é excatly o mesmo que a nuvem-subdomínio)
FleBeling
Editado: houve () em vez de {} e RewriteCond %{HTTPS} offnão é requiered
Froggiz
Sim, eu apenas copiei o seu cegamente sem verificar os suportes certos, mas bem, sh .. acontece :) Agora funciona como charme e você também tem razão em relação à outra condição. Apenas uma pergunta: como alterar a condição para também corresponder a tudo por trás da trilha /? Então ele não pegaria index.html e assim por diante?
FleBeling
já corresponder a todos start with /.well-known/acme-challenge/que média /.well-known/acme-challenge/anythingnão será redirecionamento também
Froggiz
1
As configurações de reescrita podem ser herdadas para todos os hosts virtuais RewriteOptions InheritDowndesde o Apache 2.4.8. RewriteEngine Onainda deve estar presente em cada configuração de host virtual.
tobltobs
3

@mark Versão correta da variante "mais curta e mais robusta":

RewriteCond %{REQUEST_URI} ^/\.well\-known
RewriteRule . - [L]
mente remota
fonte
adicionando este para parar as regras SSL redirecionamento abaixo dela é incrível
James Tan
O único ponto na linha 2 não funcionou para mim. É porque corresponde apenas a um caractere e o URL consiste em vários caracteres? Estou usando ^ (. *) $.
Jette
0

IMHO mais curto e mais robusto:

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

convém adicionar / acme-challenge / eventualmente, mas se você deseja depurá-lo com um arquivo arbitrário, como ./well-known/test, esta solução funciona melhor

o que realmente faz: verifica se a solicitação começa com. bem conhecido, nesse caso, não faz nada (o significado de -) e a torna a última regra [L]

Mark Hofstetter
fonte
Não. Os virtualhosts ainda parecem ter precedência. "As seções dentro das seções <VirtualHost> são aplicadas após as seções correspondentes fora da definição de host virtual. Isso permite que os hosts virtuais substituam a configuração do servidor principal." de httpd.apache.org/docs/current/sections.html
Frederick Nord