Im Moment habe ich diese Konfiguration:
location ~ ^/phpmyadmin/(.*)$
{
alias /home/phpmyadmin/$1;
}
Wenn ich jedoch besuche www.mysite.com/phpmyadmin
(beachte das Fehlen eines abschließenden Schrägstrichs), wird nicht gefunden, wonach ich bei einem 404 suche. Ich gehe davon aus, dass ich den abschließenden Schrägstrich nicht einbeziehe. Wie kann ich das beheben?
Antworten:
Es könnte sich um den regulären Ausdruck handeln, den Sie verwenden.
Die obigen Angaben stimmen mit / phpmyadmin /, / phpmyadmin / anything / else / here überein, stimmen jedoch nicht mit / phpmyadmin überein, da der reguläre Ausdruck den abschließenden Schrägstrich enthält.
Sie möchten wahrscheinlich so etwas:
Das Fragezeichen ist ein Quantifizierer für reguläre Ausdrücke und sollte Nginx anweisen, mit Null oder einem der vorherigen Zeichen (dem Schrägstrich) übereinzustimmen.
quelle
Die bessere Lösung:
Stellen Sie sicher, dass der Server zuerst über die Berechtigungen verfügt
/home/phpmyadmin
.Erklärung des Unterschieds mit akzeptierter Antwort:
Es dreht sich alles um reguläre Ausdrücke .
Zunächst einmal
^
bedeutet das Zeichen, dass Sie vom Anfang der Zeichenfolge und nicht irgendwo in der Mitte übereinstimmen möchten. Das$
am Ende bedeutet, dass es mit dem Ende der Zeichenfolge übereinstimmt.Das
(?:)
bedeutet nicht-erfassende Gruppe - wir wollen es nicht in den Erfassungsergebnissen, aber wir wollen einige Zeichen einfach gruppieren. Wir gruppieren es so, weil wir möchten/
, dass das Zeichen ein nicht wesentlicher Teil des untergeordneten Pfads und kein wesentlicher Teil des übergeordneten Pfads ist.quelle
Warum würdest du nicht einfach benutzen?
?
quelle
alias
Direktive versucht ?/phpmyadminblahblahblahblah
oder eine andere Kombination passen wirdIch weiß, dass dies eine alte Frage ist, aber für alle, die hier über Google landen, habe ich sie folgendermaßen gelöst (Variation von @ kbecs, die ziemlich gut war):
Dadurch werden alle Variationen erfasst
/foo
und/bar
auf eine andere URL (einschließlich Parameter) umgeleitet . Ich zeige es mit einerproxy_pass
Direktive, aber es würde auch mit funktionierenalias
./foo
->/bar
/foo/
->/bar/
/foo/sub
->/bar/sub
/foo/sub1/sub2/?param=value
->/bar/sub1/sub2/?param=value
Es funktioniert, weil
$1
optional die Subressourcen plus den führenden Schrägstrich erfasst werden, so dass Dinge wie nicht erfasst werden/fooextra/
. Außerdem wird ein vorhandener oder nicht vorhandener End-Schrägstrich ordnungsgemäß umgeleitet.quelle
Diese Umleitung schreibt nur URLs mit und ohne den abschließenden Schrägstrich neu. Alles, was nach dem Schrägstrich kommt, wird nicht überschrieben.
domain.com/location => umgeleitet zu domain.com/new/location
domain.com/location => umgeleitet zu domain.com/new/location
domain.com/location/other => nicht umgeleitet
quelle
Haben Sie versucht, die
try_files
Direktive zu verwenden?quelle
Ich habe es so gemacht
quelle
Warum nicht einfach zwei Umschreibungen machen:
quelle