Agora eu tenho esta configuração:
location ~ ^/phpmyadmin/(.*)$
{
alias /home/phpmyadmin/$1;
}
No entanto, se eu visitar www.mysite.com/phpmyadmin
(observe a falta de barra final), ele não encontrará o que estou procurando por um 404. Suponho que não inclua a barra final. Como posso consertar isso?
Respostas:
Pode estar na expressão regular que você está usando -
O item acima corresponderá a / phpmyadmin /, / phpmyadmin / qualquer outra coisa / aqui / aqui, mas não corresponderá a / phpmyadmin porque a expressão regular inclui a barra final.
Você provavelmente quer algo assim:
O ponto de interrogação é um quantificador de expressão regular e deve dizer ao nginx para corresponder a zero ou a um dos caracteres anteriores (a barra).
fonte
A melhor solução:
Verifique se o servidor tem permissões para
/home/phpmyadmin
primeiro.Explicação da diferença com resposta aceita:
É tudo sobre expressões regulares .
Primeiro de tudo, o
^
caractere significa que você deseja corresponder do início da string e não em algum lugar no meio. O$
no final significa corresponder ao final da string.O grupo
(?:)
significa não capturar - não queremos isso nos resultados da captura, mas queremos agrupar alguns caracteres. Nós o agrupamos assim, porque queremos que o/
caractere seja uma parte não significativa do caminho filho e não uma parte significativa do caminho pai.fonte
Por que você não usaria
?
fonte
alias
diretiva?/phpmyadminblahblahblahblah
qualquer combinaçãoSei que essa é uma pergunta antiga, mas para quem acaba aqui pelo Google, resolvi da seguinte maneira (variação da pergunta do @ kbec, que foi muito boa):
Isso capturará qualquer variação
/foo
e a redirecionará para/bar
outro URL (incluindo parâmetros). Estou mostrando isso com umaproxy_pass
diretiva, mas também funcionariaalias
./foo
->/bar
/foo/
->/bar/
/foo/sub
->/bar/sub
/foo/sub1/sub2/?param=value
->/bar/sub1/sub2/?param=value
Funciona porque
$1
, opcionalmente, capturará os sub-recursos mais a barra principal, portanto não capturará coisas do tipo/fooextra/
. Ele também redirecionará uma barra final presente ou não presente adequadamente.fonte
Esse redirecionamento reescreverá URLs apenas com e sem a barra final. Tudo o que vier após a barra não será substituído.
domain.com/location => redirecionado para domain.com/new/location
domain.com/location => redirecionado para domain.com/new/location
domain.com/location/other => não redirecionado
fonte
Você já tentou usar a
try_files
diretiva?fonte
Eu fiz assim
fonte
Por que não colocar duas reescritas simplesmente:
fonte