Solución:
Solución 1:
los =
modificador en location
block es una coincidencia exacta, sin comodines, coincidencia de prefijo o expresiones regulares. Por eso no funciona.
En su intento de expresión regular, [a-z]
coincide con un solo carácter entre a
y z
. Por eso no funciona para ti.
Debe tener sus ubicaciones configuradas de la siguiente manera. Tenga en cuenta el orden de location
declaraciones. nginx elige la primera condición de expresión regular coincidente.
location ~ ^/sitename/[0-9a-z]+/index.php$ {
fastcgi_pass phpcgi;
}
location ~ .php$ {
return 404;
}
Yo uso la coincidencia sensible a mayúsculas y minúsculas aquí (~
modificador en lugar de ~*
). En el primer caso, hago coincidir la primera parte de la ruta, luego uno o más números de caracteres alfabéticos / numéricos y luego index.php
. Puede modificar el rango de coincidencia, pero recuerde el +
para “una o más” repeticiones.
El segundo coincide con cualquier URI que termine con .php
. No necesita caracteres adicionales en su versión debido a la forma en que funcionan las expresiones regulares.
Solución 2:
El orden es importante, según la descripción de la “ubicación” de nginx:
Para encontrar una ubicación que coincida con una solicitud determinada, nginx primero verifica las ubicaciones definidas usando las cadenas de prefijo (ubicaciones de prefijo). Entre ellos, se selecciona y recuerda la ubicación con el prefijo coincidente más largo. Luego se verifican las expresiones regulares, en el orden en que aparecen en el archivo de configuración. La búsqueda de expresiones regulares termina en la primera coincidencia y se utiliza la configuración correspondiente. Si no se encuentra ninguna coincidencia con una expresión regular, se utiliza la configuración de la ubicación del prefijo recordada anteriormente.
Significa:
- Primero
=
. (coincidencia “prefijo coincidente más largo”) - Luego implícitos. (coincidencia “prefijo coincidente más largo”)
- Entonces regex. (primer partido)
Necesita ajustar el orden de las partes de expresiones regulares.