expertenaustausch > comm.software.* > comm.software.webserver

Marc Haber (23.04.2020, 20:16)
Hallo,

ich habe hier einen apache 2.4.38 und möchte einen site,
blog.example.org, komplett nach redirecten, und
zwar natürlich mit Ausnahme des Subdirectories .well-known für
letsencrypt.

Hier meine Konfiguration (Pfade und defensiv-geraffel entfernt)

|<VirtualHost blog.example.org:443>
| ServerName blog.example.org:443
| ServerAdmin webmaster
|
| ErrorLog error.log
| CustomLog access.log combined
|
| SSLEngine on
| SSLCertificateFile fullchain.pem
| SSLCertificateKeyFile privkey.pem
|
| Alias /.well-known/acme-challenge /var/lib/dehydrated/acme-challenges
|
| <Directory /var/lib/dehydrated/acme-challenges>
| Options None
| AllowOverride None
| Require all granted
| </Directory>
| Redirect "/.well-known/" "https://blog.example.org/.well-known/"
| Redirect "/" "https://www.example.org/blog/"
|</VirtualHost>

Leider funktioniert das nicht wie gewollt:
|$ HEAD -S
|HEAD
|302 Found
|HEAD
|404 Not Found

Das liegt wohl daran, dass das Redirect _vor_ dem Alias greift. In der
Doku für mod_alias steht, dass ein in einer Location-Direktive
stehender Alias für diese Location greift bevor rewritten wird, aber
das bekomme ich nicht hin und habe auch meine Zweifel dass das
funktionieren wird, weil ja der Redirect immer noch hintendran kommt.

<Location "/.well-known/acme-challenge">
Alias /var/lib/dehydrated/acme-challenges
</Location>

anstelle des einzeiligen Aliases führt jedenfalls dazu, dass er foo,
dann foo/index.html, dann foo/index.html/index.html abruft. Der
einzeilige ALias innerhalb der Location wird schon von configcheck
abgewiesen ("Alias cannot occur in directory context").

Das Fass "Rewrite statt Redirect" möchte ich eigentlich nicht
aufmachen.

Was zu funktionieren scheint ist
| RedirectMatch "^/[^\.]" "https://www.zugschlus.de/blog/"
anstelle des Redirect "/", aber das nimmt halt alles, was auf einem
Punkt beginnt, vom redirect aus.

Geht das auch in "schön"?

Grüße
Marc
Sven Hartge (23.04.2020, 20:35)
Marc Haber <mh+usenetspam1118> wrote:

> | Redirect "/.well-known/" "https://blog.example.org/.well-known/"
> | Redirect "/" "https://www.example.org/blog/"


> Leider funktioniert das nicht wie gewollt:
> |$ HEAD -S
> |HEAD
> |302 Found
> |HEAD
> |404 Not Found


> Das liegt wohl daran, dass das Redirect _vor_ dem Alias greift. In der
> Doku für mod_alias steht, dass ein in einer Location-Direktive
> stehender Alias für diese Location greift bevor rewritten wird, aber
> das bekomme ich nicht hin und habe auch meine Zweifel dass das
> funktionieren wird, weil ja der Redirect immer noch hintendran kommt.


Richtig. Redirect ist sehr gierig und greift sich alles. Leider gibt es
auch nichts wie "Redirect /sonstwas !" oder so, mit dem man das
überschreiben könnte.

> Das Fass "Rewrite statt Redirect" möchte ich eigentlich nicht
> aufmachen.


Ich fürchte, du musst jetzt sehr sehr stark sein, Marc.

> Was zu funktionieren scheint ist
> | RedirectMatch "^/[^\.]" "https://www.zugschlus.de/blog/"
> anstelle des Redirect "/", aber das nimmt halt alles, was auf einem
> Punkt beginnt, vom redirect aus.


> Geht das auch in "schön"?


Leider ist das eine der Situationen, wo man aktuell um mod_rewrite und
seine Mächtigkeit nicht umhin kommt.

S!
Marc Haber (23.04.2020, 21:26)
Sven Hartge <sh-204> wrote:
>Ich fürchte, du musst jetzt sehr sehr stark sein, Marc.
>Marc Haber <mh+usenetspam1118> wrote:
>Leider ist das eine der Situationen, wo man aktuell um mod_rewrite und
>seine Mächtigkeit nicht umhin kommt.


.... oder halt das RedirectMatch nimmt. Für Rewrite bin ich nicht mehr
jung genug. Oder ich finde irgendwo ein fertiges Kochrezept.

Grüße
Marc
Enrik Berkhan (23.04.2020, 21:32)
Marc Haber <mh+usenetspam1118> wrote:
> Was zu funktionieren scheint ist
> | RedirectMatch "^/[^\.]" "https://www.zugschlus.de/blog/"
> anstelle des Redirect "/", aber das nimmt halt alles, was auf einem
> Punkt beginnt, vom redirect aus.
> Geht das auch in "schön"?


Bei sowas bin ich wohl auch mal gelandet, in einer alten config habe ich
das gefunden:

Alias "/.well-known/" "/var/www/bla.bla/.well-known/"
RedirectMatch "^/$"
RedirectMatch "^/([^.].*)$" https://bla.bla/$1

Dass damit andere .unterverzeichnisse auch nicht redirected werden, habe
ich wohl in Kauf genommen. Notfalls müsste man die eben reinfummeln.
Gerade noch unter der Rewrite-Schmerzgrenze, würde ich sagen.

Viele Grüße,
Enrik
Peter J. Holzer (23.04.2020, 22:24)
On 2020-04-23 19:26, Marc Haber <mh+usenetspam1118> wrote:
> Sven Hartge <sh-204> wrote:
> ... oder halt das RedirectMatch nimmt. Für Rewrite bin ich nicht mehr
> jung genug. Oder ich finde irgendwo ein fertiges Kochrezept.


Bei mir schaut das so aus:

RewriteEngine on
RewriteCond %{THE_REQUEST} !/.well-known/
RewriteRule ^/(.*) https://example.com/$1 [L,R]

hp
Marc Haber (24.04.2020, 07:54)
"Peter J. Holzer" <hjp-usenet3> wrote:
>On 2020-04-23 19:26, Marc Haber <mh+usenetspam1118> wrote:
>Bei mir schaut das so aus:
> RewriteEngine on
> RewriteCond %{THE_REQUEST} !/.well-known/
> RewriteRule ^/(.*) [L,R]


Und mit dieser Lösung kann ich mod_rewrite im gleichen vhost auch noch
für andere Dinge benutzen? Oder ist rewrite damit "belegt"?

Grüße
Marc
Stefan Froehlich (24.04.2020, 10:23)
On Fri, 24 Apr 2020 07:54:00 Marc Haber wrote:
> "Peter J. Holzer" <hjp-usenet3> wrote:
> > RewriteEngine on
> > RewriteCond %{THE_REQUEST} !/.well-known/
> > RewriteRule ^/(.*) https://example.com/$1 [L,R]

> Und mit dieser Lösung kann ich mod_rewrite im gleichen vhost auch noch
> für andere Dinge benutzen? Oder ist rewrite damit "belegt"?


Im gleichen vhost geht das sowieso, da musst Du Dir allenfalls um
die Reihenfolge Gedanken machen.

Wenn Du so etwas global verwenden möchtest, bietet sich z.B.:

#v+
RewriteOptions InheritDown
#v-

....an, damit die Regeln automatisch in die einzelnen vhosts
übernommen werden.

Servus,
Stefan
Marc Haber (26.04.2020, 12:08)
Enrik Berkhan <Enrik.Berkhan> wrote:
>Marc Haber <mh+usenetspam1118> wrote:
>Bei sowas bin ich wohl auch mal gelandet, in einer alten config habe ich
>das gefunden:
> Alias "/.well-known/" "/var/www/bla.bla/.well-known/"
> RedirectMatch "^/$"
> RedirectMatch "^/([^.].*)$"
>Dass damit andere .unterverzeichnisse auch nicht redirected werden, habe
>ich wohl in Kauf genommen. Notfalls müsste man die eben reinfummeln.
>Gerade noch unter der Rewrite-Schmerzgrenze, würde ich sagen.


Manchmal hilft es, alte Literatur nochmal durchzulesen. Ich bin dann
bei den zero-length negativ lookahead assertions hängengeblieben.

|RedirectMatch "^/(?!\.well-known/acme-challenge/).*" "https://www.example.org/blog/

tut das, was ich mir wünsche. Ich kann mir vorstellen, mit diesem
Konstrukt könnte man auch gecapturte URL-Redirects wie bei Dir oben
hinbekommen. Aber das steht mir aktuell nicht auf dem Pflichtenheft.

Für den Trivialfall eines redirects von example.org nach
o.ä, braucht man übrigens im Fall von Letsencrypt
nichtmal das, wenn man für alle Sites dasselbe Zertifikat verwendet.
Im ACME-RFC steht ausdrücklich drin, dass der ACME-Server bei der
Web-Challenge Redirects folgen muss¹, man braucht also in example.org
überhaupt keinen ACME-Alias o.ä. sondern nur den "stumpfen" Redirect,
denn wenn example.org/.well-known/acme-challenge/foo auf
redirected, dann reicht das
für eine erfolgreiche ACME-Challenge.

This being said: Use DNS-01 wherever possible. Sollte die
Verifizierung der Wahl sein, out of band und flexibel.

Grüße
Marc
Enrik Berkhan (26.04.2020, 14:23)
Marc Haber <mh+usenetspam1118> wrote:
> Manchmal hilft es, alte Literatur nochmal durchzulesen. Ich bin dann
> bei den zero-length negativ lookahead assertions hängengeblieben.
> |RedirectMatch "^/(?!\.well-known/acme-challenge/).*" "https://www.example.org/blog/
> tut das, was ich mir wünsche. Ich kann mir vorstellen, mit diesem
> Konstrukt könnte man auch gecapturte URL-Redirects wie bei Dir oben
> hinbekommen. Aber das steht mir aktuell nicht auf dem Pflichtenheft.


Ja, das sieht auch nach einer hübschen Lösung aus.

Viele Grüße,
Enrik
Peter J. Holzer (28.04.2020, 17:44)
On 2020-04-24 05:54, Marc Haber <mh+usenetspam1118> wrote:
> "Peter J. Holzer" <hjp-usenet3> wrote:
> Und mit dieser Lösung kann ich mod_rewrite im gleichen vhost auch noch
> für andere Dinge benutzen? Oder ist rewrite damit "belegt"?


Naja, hier ist der Zweck, alles außer .well-known auf https umzuleiten
(wüsste nicht, was ich sonst zwingend "http-only" haben sollte). Aber
natürlich kann man beliebig viele RewriteRules (jeweils optional mit
RewriteConds) angegeben, die werden halt dann der Reihe nach
abgearbeitet.

hp
Ähnliche Themen