Nginx 1.10.3 Ubuntu, instalación apta estándar. index index.php;
Ubicado fuera de server
manzana.
Necesito:
http://example.com/test/1
apuntando a/var/www/example.com/test/1
http://example.com/test/2
apuntando a/var/www/example.com/test/2
..etcétera.
Como crearé demasiadas pruebas, necesito un comodín para try_files
. Actualmente estoy sin comodines:
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 muchas recomendaciones, ninguna funciona.
PHP simple funciona bien. WordPress y Laravel dieron "Archivo no 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$ {
...
}
Archivo no 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$ {
...
}
En todos los intentos siguientes, descarga el archivo PHP en lugar de ejecutar 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$ {
...
}
Si puedo, estoy dispuesto a dar $10 por la respuesta correcta.
Respuesta1
Los bloques de expresión regular location
se evalúan en orden, por lo que el .php
bloque debe colocarse antes del /test/...
bloque; de lo contrario, los .php
archivos que se encuentran debajo /test/
se descargarán en lugar de ejecutarse. Vereste documentopara detalles.
Tu mejor versión quedó antepenúltima. La expresión regular extrae solo el elemento de ruta que sigue al /test/
prefijo.
Simplemente invierta los location
bloques. Por ejemplo:
server {
server_name example.com;
root /var/www/example.com;
location ~ \.php$ {
...
}
location ~ /test/(?<content>[^/]+) {
try_files $uri $uri/ /test/$content/index.php?$args;
}
}