En este momento tengo esta configuración:
location ~ ^/phpmyadmin/(.*)$
{
alias /home/phpmyadmin/$1;
}
Sin embargo, si visito www.mysite.com/phpmyadmin
(tenga en cuenta la falta de una barra diagonal final), no encontrará lo que estoy buscando un 404. Supongo que no incluyo la barra diagonal final. ¿Cómo puedo arreglar esto?
Respuestas:
Puede estar en la expresión regular que está utilizando:
Lo anterior coincidirá con / phpmyadmin /, / phpmyadmin / anything / else / here, pero no coincidirá con / phpmyadmin porque la expresión regular incluye la barra diagonal final.
Probablemente quieras algo como esto:
El signo de interrogación es un cuantificador de expresiones regulares y debe indicarle a nginx que coincida con cero o con uno de los caracteres anteriores (la barra inclinada).
fuente
La mejor solución:
Asegúrese de que el servidor tenga permisos
/home/phpmyadmin
primero.Explicación de la diferencia con la respuesta aceptada:
Se trata de expresiones regulares .
En primer lugar, el
^
carácter significa que desea hacer coincidir desde el principio de la cadena y no en el medio. Al$
final significa que coincide con el final de la cadena.El grupo
(?:)
significa no capturar: no lo queremos en los resultados de captura, pero queremos agrupar algunos caracteres de manera simple. Lo agrupamos así, porque queremos que el/
carácter sea una parte no significativa de la ruta secundaria y no una parte significativa de la ruta primaria.fuente
¿Por qué no usarías
?
fuente
alias
directiva?/phpmyadminblahblahblahblah
cualquier otra combinaciónSé que esta es una vieja pregunta, pero para cualquiera que termine aquí a través de Google, la resolví de la siguiente manera (variación de la de @ kbec, que fue bastante buena):
Esto capturará cualquier variación
/foo
y la redireccionará a/bar
otra url (incluidos los parámetros). Lo estoy mostrando con unaproxy_pass
directiva pero también funcionaríaalias
./foo
->/bar
/foo/
->/bar/
/foo/sub
->/bar/sub
/foo/sub1/sub2/?param=value
->/bar/sub1/sub2/?param=value
Funciona porque
$1
opcionalmente capturará los recursos secundarios más la barra diagonal, por lo que no capturará cosas como/fooextra/
. También redirigirá una barra oblicua final presente o no presente correctamente.fuente
Esta redirección solo reescribirá las URL con y sin la barra diagonal final. Cualquier cosa que venga después de la barra no se sobrescribirá.
domain.com/location => redirigido a domain.com/new/location
domain.com/location => redirigido a domain.com/new/location
domain.com/location/other => no redirigido
fuente
¿Has intentado usar la
try_files
directiva?fuente
Lo hice asi
fuente
¿Por qué no poner dos reescrituras simplemente:
fuente