apache2.4 mod_rewrite exclure un alias spécifique directroy / uri

11

J'ai la configuration suivante sur l'un de mes 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>...

Ce que je veux réaliser, c'est que mod_rewrite ne réécrit pas l'URL lors de l' http://cloud.domain.de/.well-known/acme-challenge/accès à l'url .

J'ai déjà essayé différentes approches, l'une d'entre elles étant la RewriteRule commentée ci-dessus, mais rien ne semble fonctionner: le serveur la réécrit à https à chaque fois.

Lorsque je désactive la réécriture à des fins de test, je peux très bien accéder à l'URL d'alias ...

Comment puis-je obtenir que l'URL spécifique ne soit pas réécrite?

FleBeling
la source

Réponses:

16

Comme ça :

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

Si l'URI correspond, start with /.well-known/acme-challenge/la demande ne sera pas redirigée

Froggiz
la source
Tout d'abord, merci pour vos conseils! Malheureusement, cela n'a pas fonctionné. Lors de votre visite: http://www.server-plant.de/.well-known/acme-challenge/il est toujours en cours de réécriture. (J'ai appliqué les mêmes règles et conditions de réécriture pour mon sous-domaine www, donc c'est exactement la même chose que le sous-domaine cloud)
FleBeling
Modifié: il y avait () au lieu de {} et RewriteCond %{HTTPS} offn'est pas requis
Froggiz
Oui, je viens de copier aveuglément le vôtre sans vérifier les bons supports, mais bon, sh .. arrive :) Maintenant, cela fonctionne comme un charme et vous avez également raison en ce qui concerne l'autre condition. Il ne reste qu'une question: comment changer la condition pour qu'elle corresponde également à tout ce qui se trouve derrière la queue /? Il n'attraperait donc pas index.html et ainsi de suite?
FleBeling
cela correspond déjà à tout start with /.well-known/acme-challenge/ce que cela signifie /.well-known/acme-challenge/anythingne sera pas trop redirigé
Froggiz
1
Les configurations de réécriture peuvent être héritées de tous les hôtes virtuels RewriteOptions InheritDowndepuis Apache 2.4.8. RewriteEngine Ondoit encore être présent dans chaque configuration d'hôte virtuel.
tobltobs
3

@mark Version correcte de la variante "plus courte et plus robuste":

RewriteCond %{REQUEST_URI} ^/\.well\-known
RewriteRule . - [L]
esprit distant
la source
l'ajout de cela pour arrêter les règles de redirection ssl ci-dessous est génial
James Tan
Le seul point de la ligne 2 ne fonctionnait pas pour moi. Est-ce parce qu'il ne correspond qu'à un seul caractère et que l'URL est composée de plusieurs caractères? J'utilise à la place ^ (. *) $.
Jette
0

IMHO plus court et plus robuste:

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

vous voudrez peut-être ajouter / acme-challenge / éventuellement, mais si vous souhaitez le déboguer avec un fichier arbitraire, comme ./well-known/test, cette solution fonctionne mieux

que fait-il réellement: regarde si la demande commence par .bien connu, dans ce cas ne fait rien (le sens de -) et en fait la dernière règle [L]

Mark Hofstetter
la source
Nan. Les hôtes virtuels semblent toujours avoir la priorité. "Les sections à l'intérieur des sections <VirtualHost> sont appliquées après les sections correspondantes en dehors de la définition d'hôte virtuel. Cela permet aux hôtes virtuels de remplacer la configuration du serveur principal." de httpd.apache.org/docs/current/sections.html
Frederick Nord