Para reflejar un sitio web completo como HTML estático,
Me gustaría convertir URLs como http://example.com/script.php?t=12
a http://example.com/script.php_t=12
.
El aviso ?
en URL se está convirtiendo a _
.
Esto permitirá que nginx o apache sirvan estos archivos del disco como HTML sin formato que obtuvimos y guardamos de wget
un archivo para cada URL, en lugar de un archivo PHP.
¿Es posible hacerlo a través de la reescritura de URL de Nginx?
http://example.com/script.php?a=1&t=3
necesitará una acción de reescritura súper elegantet
comof
,u
, etc.Respuestas:
Lo hice funcionar usando try_files:
Esto intentará encontrar un archivo en el disco con el nombre del patrón que proporcionó con una "_" en lugar de "?".
La configuración adicional depende de cómo guardó archivos estáticos como imágenes u hojas de estilo. Puede agregar un respaldo tratando de leerlos sin consultar el disco del formulario de cadena de la siguiente manera:
fuente
location ~ \.php$
podemos irtry_files
a trabajar, pero no funcionalocation /
Algo en la línea:
fuente
?
mi respuesta utilizada..*
cláusula más estricta en el primer parámetro de reescritura. ¡Esto es de gran ayuda!No creo que pueda hacer esto con vanilla nginx, pero si está dispuesto a instalar el módulo Lua para nginx ( http://wiki.nginx.org/HttpLuaModule ) puede hacerlo.
Lo probé localmente y parece hacer lo que estás buscando. Si desea mantener otros parámetros separados por símbolos, cambie el bloque rewrite_by_lua para que sea
fuente
Esto funciona en nginx / 1.6.2.
Pero personalmente usaría la
try_files
solución con un respaldo a un URI original si hay alguno .Por ejemplo, si tiene
script.php
en el disco, primero lo intentará, y luego, si no hay ninguno, lo buscaráscript.php_t=12
.try_files
necesita una versión de nginx lo suficientemente reciente.Y si esto no es suficiente, puede hacer esto dentro de un
if
:fuente
?
al final de su reescritura allí para que no se agreguen los parámetros de consulta ...)try_files
se detendrá$uri
si hay un bloque de ubicación que coincida con eso, o un archivo para ello (la solicitud sin obtener argumentos), ¿es ese el caso??
no tiene ningún efecto visible en los archivos estáticos, solo verá una consulta adicional en sus registros de acceso; si te importa, seguro agrega un signo de interrogaciónLa wiki dice
Entonces
rewrite ^ ${uri}_$args? last;
debería funcionar.fuente
rewrite ^ $uri_$args? last;
Las respuestas sugeridas anteriormente deberían funcionar. Sin embargo, verá cuán sensible se vuelve su URL. Debido a que nginx intenta verificar si el nombre del archivo existe primero en el servidor, cualquier parámetro adicional lo descartará.
Mi sugerencia es dejar la URL como está y enrutarla al archivo correcto con php. Tienes acceso al
t
parámetro.fuente