Para reflejar un sitio web completo como HTML estático,
Me gustaría convertir URLs como http://example.com/script.php?t=12a 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 wgetun 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=3necesitará una acción de reescritura súper elegantetcomof,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_filesa 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_filessolución con un respaldo a un URI original si hay alguno .Por ejemplo, si tiene
script.phpen el disco, primero lo intentará, y luego, si no hay ninguno, lo buscaráscript.php_t=12.try_filesnecesita 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_filesse detendrá$urisi 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
tparámetro.fuente