En ce moment j'ai cette config:
location ~ ^/phpmyadmin/(.*)$
{
alias /home/phpmyadmin/$1;
}
Cependant, si je visite www.mysite.com/phpmyadmin
(notez le manque de barre oblique), il ne trouvera pas ce que je recherche comme un 404. Je suppose que je n'inclus pas la barre oblique. Comment puis-je réparer cela?
Réponses:
C'est peut-être dans l'expression régulière que vous utilisez -
Ce qui précède correspondra à / phpmyadmin /, / phpmyadmin / n'importe quoi / d'autre / ici, mais il ne correspondra pas à / phpmyadmin car l'expression régulière inclut la barre oblique finale.
Vous voulez probablement quelque chose comme ça:
Le point d'interrogation est un quantificateur d'expression régulière et doit indiquer à nginx de correspondre à zéro ou à l'un des caractères précédents (la barre oblique).
la source
La meilleure solution:
Assurez-vous que le serveur dispose des autorisations nécessaires en
/home/phpmyadmin
premier.Explication de la différence avec réponse acceptée:
Tout est question d' expressions régulières .
Tout d'abord, le caractère
^
signifie que vous voulez faire correspondre le début de la chaîne et non quelque part au milieu. Le$
à la fin signifie correspondre à la fin de la chaîne.Les
(?:)
groupes moyens ne capturant pas - nous ne le voulons pas dans les résultats de la capture, mais nous voulons simplement grouper certains caractères. Nous le regroupons comme ceci, car nous voulons que le caractère/
soit une partie non significative du chemin enfant et non une partie importante du chemin parent.la source
Pourquoi ne pas simplement utiliser
?
la source
alias
directive?/phpmyadminblahblahblahblah
ou à une autre combinaisonJe sais que c'est une vieille question, mais pour tous ceux qui se retrouvent ici via Google, je l'ai résolue de la manière suivante (variation de celle de @ kbec, qui était plutôt bonne):
Cela capturera toute variation de
/foo
et le redirigera vers/bar
une autre URL (y compris les paramètres). Je le montre avec uneproxy_pass
directive mais cela fonctionnerait aussi avecalias
./foo
->/bar
/foo/
->/bar/
/foo/sub
->/bar/sub
/foo/sub1/sub2/?param=value
->/bar/sub1/sub2/?param=value
Cela fonctionne parce
$1
que capturera éventuellement les sous-ressources ainsi que la barre oblique, de sorte qu'il ne capture pas les éléments tels que/fooextra/
. Il redirigera également correctement un slash de fin présent ou non présent.la source
Cette redirection ne fera que réécrire les URL avec et sans la barre oblique finale. Tout ce qui vient après la barre oblique ne sera pas écrasé.
domain.com/location => redirigé vers domain.com/new/location
domain.com/location => redirigé vers domain.com/new/location
domain.com/location/other => non redirigé
la source
Avez-vous essayé d'utiliser
try_files
directive?la source
Je l'ai fait comme ça
la source
Pourquoi ne pas mettre deux réécrit simplement:
la source