Pregunta:
Las reglas de reescritura externas son increíbles. Te permiten definir reescrituras que no necesariamente pasan por el index.php
WordPress. Esto significa que puede asignar reglas arbitrarias a archivos arbitrarios como:
$wp_rewrite->add_external_rule( '^somethingrandom/?$', 'wp-content/wp-uploads/hiddendirectory/somefile.php' );
Entonces, cualquier solicitud de http://site.url/somethingrandom/
realidad se servirá un archivo PHP estática de un directorio diferente. Esto es asombroso y te permite hacer todo tipo de cosas ingeniosas.
Pero solo funciona con Apache.
El método add_external_rule()
escribe sus reglas registradas en .htaccess
. Dado que Nginx no usa un archivo .htaccess
, ese servidor ignora completamente las reglas externas. Lo que necesito es una forma independiente del servidor para registrar reglas programáticamente como la anterior. ¿Algunas ideas?
Respuesta:
Esto también supone que los archivos .htaccess están habilitados en Apache, que casi siempre se encuentra en un alojamiento compartido, pero a menudo está deshabilitado en entornos empresariales. Una forma de lograr esto sería escribir su propia función add_external_nginx_rule que escriba redirecciones en un archivo (podría usar .htaccess incluso, aunque eso podría ser confuso, debería ser un archivo oculto que comience con. No importa qué) que luego incluya en su bloque de servidor Nginx como
include /var/www/html/sitefolder/.htaccess;
En su función, escribiría redireccionamientos en formato Nginx, que es casi el mismo que el formato Apache en muchos casos. Esto es probablemente algo que incluso podrías convertir en un complemento. Requiere una configuración especial en su archivo de configuración de Nginx, pero el uso de .htaccess en Apache también requiere que esté habilitado en el archivo de configuración de Apache, por lo que podría argumentar que es el mismo concepto.
Nota: No he probado nada de esto, pero no veo ninguna razón por la que esto no funcionaría. Valdría la pena explorar.
Actualización: Mark tiene razón en los comentarios: esto no funcionaría porque Nginx solo lee los archivos de configuración en el inicio o la recarga inicial, por lo que necesitaría reiniciar Nginx con cualquier cambio, lo que hace que esta solución sea problemática desde el punto de vista de la seguridad.