Nginx 1.10.3 Ubuntu, instalação padrão do apt. index index.php;
localizado fora server
do quarteirão.
Eu preciso de:
http://example.com/test/1
apontando para/var/www/example.com/test/1
http://example.com/test/2
apontando para/var/www/example.com/test/2
..e assim por diante.
Como criarei muitos testes, preciso de um curinga para try_files
. Atualmente estou sem curinga:
server {
server_name example.com;
root /var/www/example.com;
location /test/1/ {
try_files $uri $uri/ /test/1/index.php?$args;
}
location /test/2/ {
try_files $uri $uri/ /test/2/index.php?$args;
}
location ~ \.php$ {
...
}
De muitas recomendações, nenhuma delas funciona.
PHP simples funcionando bem. WordPress e Laravel deram "Arquivo não encontrado":
server {
server_name example.com;
location ~ ^/test/(?<content>.+)$ {
root /var/www/example.com/test/$content;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
...
}
Arquivo não encontrado:
server {
server_name example.com;
location ~ ^/test/(?<content>[^/]+) {
root /var/www/example.com/test/$content;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
...
}
Em todas as tentativas abaixo, baixe o arquivo PHP em vez de executar o PHP:
server {
server_name example.com;
root /var/www/example.com;
location ~ /(?<content>[^/]+) {
try_files $uri $uri/ /$content/index.php?$args;
}
location ~ \.php$ {
...
}
server {
server_name example.com;
root /var/www/example.com;
location ~ /(.*)/ {
try_files $uri $uri/ /$1/index.php?$args;
}
location ~ \.php$ {
...
}
server {
server_name example.com;
root /var/www/example.com;
location ~ /test/(?<content>[^/]+) {
try_files $uri $uri/ /test/$content/index.php?$args;
}
location ~ \.php$ {
...
}
server {
server_name example.com;
root /var/www/example.com;
location ~ /test/(?<content>.+) {
try_files $uri $uri/ /test/$content/index.php?$args;
}
location ~ \.php$ {
...
}
Se puder, estou disposto a dar $ 10 pela resposta certa
Responder1
location
Os blocos de expressões regulares são avaliados em ordem, portanto o .php
bloco deve ser colocado antes do /test/...
bloco, caso contrário os .php
arquivos abaixo /test/
serão baixados em vez de executados. Veresse documentopara detalhes.
Sua melhor versão ficou em penúltimo lugar. A expressão regular extrai apenas o elemento do caminho após o /test/
prefixo.
Basta inverter os location
blocos. Por exemplo:
server {
server_name example.com;
root /var/www/example.com;
location ~ \.php$ {
...
}
location ~ /test/(?<content>[^/]+) {
try_files $uri $uri/ /test/$content/index.php?$args;
}
}