Cómo deshabilitar la redirección .htaccess para una carpeta específica

Cómo deshabilitar la redirección .htaccess para una carpeta específica

Escribo las siguientes .htaccessreglas para redirigir todas las URL de www.a.coma 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]

Ahora hay un archivo bajo un subdirectorio de a.com, como se muestra a continuación:

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

Se utiliza para la renovación AutoSSL. Con la redirección anterior, AutoSSL ya no podrá encontrar el archivo, por lo que no podrá realizar la renovación.

Entonces, ¿es posible desactivar la redirección en /.well-known/acme-challenge/?

Respuesta1

Dado que está redirigiendo todo a una ruta URL fija, también puede crear la excepción directamente en la RewriteRuledirectiva (no es necesario capturar la ruta URL como lo está haciendo actualmente).

Por ejemplo:

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

El !prefijo en elRewriteRule patrónniega la expresión, por lo que tiene éxito cuando la expresión regular nonofósforo. En este caso, cuando la ruta URL solicitada no comienza .well-known/acme-challenge/. (Sin embargo, consulte el "caso límite" a continuación).

También combiné tus doscondiciones( RewriteConddirectivas) en una. No es necesario que la NCmarca esté en la regla misma (suponiendo que esté en Linux, no en Windows).

Recuerde hacer una barra invertida para escapar de los puntos literales en la expresión regular.

Estuche Edge (extra opcional)

Tenga en cuenta que si también tiene un patrón de controlador frontal más adelante en el .htaccessarchivo (por ejemplo, WordPress, Joomla, la mayoría de los otros marcos/CMS, etc.), también debe agregar uncondicióna la regla anterior para evitar que se redirijan las reescrituras en el controlador frontal al solicitar una URL del formulario /.well-known/acme-challenge/<non-existent-file>. Por ejemplo:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
:

Sin esta condición, de http://a.com/.well-known/acme-challenge/<non-existent-file>lo contrario se redirigiría una solicitud a https://www.b.com/index.php(suponiendo index.phpque sea el controlador frontal).

Resumen

La regla completa quedaría entonces:

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...

ACTUALIZAR:

Si la redirección es una línea simple:, redirect 301 / https://www.b.com/myfolder/¿cómo escribir la excepción /.well-known/acme-challenge/?

desde elsimple Redirect(mod_alias) en sí misma no proporciona la capacidad de hacer "excepciones", sería necesario rodear la directiva con una <If>expresión (requiere Apache 2.4). Por ejemplo:

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

Referencia:https://httpd.apache.org/docs/2.4/expr.html

(Si está utilizando la Redirectdirectiva de esta manera, entonces no existe un patrón de "controlador frontal" ni un "caso límite" como se mencionó anteriormente).

Aparte:Aunque puedan parecer similares, esta Redirectdirectiva es bastante diferente de la RewriteRuledirectiva utilizada anteriormente y produce resultados diferentes. La RewriteRuledirectiva anteriordescartesla ruta URL solicitada, redirigiendo todo a https://www.b.com/myfolder/. Sin embargo, la Redirectdirectiva utilizada aquíconservasla ruta URL solicitada, anteponiendo la ruta URL con /myfolder(por ejemplo, /foo/barse redirige a https://www.b.com/myfolder/foo/bar)

información relacionada