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

11

Tengo la siguiente configuración en uno de mis 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>...

Lo que quiero lograr es que mod_rewrite no reescriba la URL cuando http://cloud.domain.de/.well-known/acme-challenge/se accede a la url .

Ya probé diferentes enfoques, uno de los cuales fue el RewriteRule comentado anteriormente, pero nada parece funcionar: el servidor lo reescribe a https cada vez.

Cuando desactivo la reescritura con fines de prueba, puedo acceder a la URL del alias muy bien ...

¿Cómo logro que la URL específica no se vuelva a escribir?

FleBeling
fuente

Respuestas:

16

Como eso :

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

Si el URI coincide, start with /.well-known/acme-challenge/la solicitud no se redirigirá

Froggiz
fuente
Primero, gracias por tu consejo! Lamentablemente, no funcionó. Cuando visites: http://www.server-plant.de/.well-known/acme-challenge/todavía se está reescribiendo. (Apliqué las mismas reglas y condiciones de reescritura para mi subdominio www, por lo que es exactamente igual que el subdominio en la nube)
FleBeling
Editado: había () en lugar de {} y RewriteCond %{HTTPS} offno es necesario
Froggiz
Sí, solo copié ciegamente el tuyo sin buscar los corchetes correctos, pero bueno, sh ... sucede :) Ahora funciona de maravilla y también tienes razón con respecto a la otra condición. Solo queda una pregunta: ¿Cómo cambiar la condición para que también coincida con todo lo que está detrás del final /? Entonces, ¿no capturaría index.html y así sucesivamente?
FleBeling
ya coincide con todo lo start with /.well-known/acme-challenge/que significa /.well-known/acme-challenge/anythingque no será redirigido también
Froggiz
1
Las configuraciones de reescritura se pueden heredar a todos los hosts virtuales con RewriteOptions InheritDownApache 2.4.8. RewriteEngine Onaún tiene que estar presente en cada configuración de host virtual.
tobltobs
3

@mark Versión correcta de la variante "más corta y más robusta":

RewriteCond %{REQUEST_URI} ^/\.well\-known
RewriteRule . - [L]
mente remota
fuente
agregar esto para detener las reglas de redireccionamiento de SSL a continuación es increíble
James Tan
El único punto en la línea 2 no funcionó para mí. ¿Es porque solo coincide con un carácter y la url consta de varios caracteres? Estoy usando ^ (. *) $ En su lugar.
Jette
0

En mi humilde opinión más corto y más robusto:

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

es posible que desee agregar / acme-challenge / eventualmente, pero si desea depurarlo con un archivo arbitrario, como ./well-known/test, esta solución funciona mejor

qué hace realmente: mira si la solicitud comienza con .well-conocido, en ese caso no hace nada (el significado de -) y la convierte en la última regla [L]

Mark Hofstetter
fuente
no Los hosts virtuales todavía parecen tener prioridad. "Las secciones dentro de las secciones <VirtualHost> se aplican después de las secciones correspondientes fuera de la definición de host virtual. Esto permite que los hosts virtuales anulen la configuración del servidor principal". de httpd.apache.org/docs/current/sections.html
Frederick Nord