apache2.4 mod_rewrite schließt einen bestimmten Alias ​​directroy / uri aus

11

Ich habe das folgende Setup auf einem meiner 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>...

Was ich erreichen möchte, ist, dass mod_rewrite die URL nicht neu schreibt, wenn auf die URL http://cloud.domain.de/.well-known/acme-challenge/zugegriffen wird.

Ich habe bereits verschiedene Ansätze ausprobiert, einer davon ist die oben auskommentierte RewriteRule, aber nichts scheint zu funktionieren: Der Server schreibt sie jedes Mal in https um.

Wenn ich das Umschreiben zu Testzwecken deaktiviere, kann ich problemlos auf die Alias-URL zugreifen ...

Wie erreiche ich, dass die spezifische URL nicht neu geschrieben wird?

FleBeling
quelle

Antworten:

16

So wie das :

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

Wenn der URI übereinstimmt, wird start with /.well-known/acme-challenge/die Anforderung nicht umgeleitet

Froggiz
quelle
Zunächst einmal vielen Dank für Ihren Rat! Leider hat es nicht funktioniert. Wenn Sie besuchen: http://www.server-plant.de/.well-known/acme-challenge/Es wird noch umgeschrieben. (Ich habe die gleichen Rewrrite-Regeln und -Bedingungen für meine www-Subdomain angewendet, daher ist es genau das gleiche wie für die Cloud-Subdomain.)
FleBeling
Bearbeitet: es gab () anstelle von {} und RewriteCond %{HTTPS} offwird nicht benötigt
Froggiz
Ja, ich habe deine nur blind kopiert, ohne nach den richtigen Klammern zu suchen, aber nun, sh .. passiert :) Jetzt funktioniert es wie ein Zauber und du hast auch Recht mit der anderen Bedingung. Nur noch eine Frage: Wie kann man den Zustand so ändern, dass er auch zu allem passt, was hinter dem Trailing steht /? Also würde es index.html nicht fangen und so weiter?
FleBeling
es start with /.well-known/acme-challenge//.well-known/acme-challenge/anything
stimmt
1
Rewrite-Konfigurationen können RewriteOptions InheritDownseit Apache 2.4.8 an alle virtuellen Hosts vererbt werden. RewriteEngine Onmuss noch in jeder Konfiguration des virtuellen Hosts vorhanden sein.
tobltobs
3

@mark Richtige Version der "kürzeren und robusteren" Variante:

RewriteCond %{REQUEST_URI} ^/\.well\-known
RewriteRule . - [L]
entfernter Geist
quelle
Das Hinzufügen, um die SSL-Umleitungsregeln darunter zu stoppen, ist fantastisch
James Tan
Der einzelne Punkt in Zeile 2 hat bei mir nicht funktioniert. Liegt es daran, dass es nur einem Zeichen entspricht und die URL aus mehreren Zeichen besteht? Ich benutze stattdessen ^ (. *) $.
Jette
0

IMHO kürzer und robuster:

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

Möglicherweise möchten Sie / acme-Challenge / eventuell hinzufügen, aber wenn Sie es mit einer beliebigen Datei wie ./well-known/test debuggen möchten, funktioniert diese Lösung besser

Was macht es eigentlich: prüft, ob die Anfrage mit .well bekannt beginnt, tut in diesem Fall nichts (die Bedeutung von -) und macht es zur letzten Regel [L]

Mark Hofstetter
quelle
Nee. Die virtuellen Hosts scheinen immer noch Vorrang zu haben. "Abschnitte innerhalb von <VirtualHost> -Abschnitten werden nach den entsprechenden Abschnitten außerhalb der Definition des virtuellen Hosts angewendet. Dadurch können virtuelle Hosts die Hauptserverkonfiguration überschreiben." von httpd.apache.org/docs/current/sections.html
Frederick Nord