web-dev-qa-db-fra.com

Comment ajouter une règle de réécriture externe indépendante du serveur?

Les règles de réécriture externes sont géniales. Ils vous permettent de définir des réécritures qui ne passent pas nécessairement par le index.php de WordPress. Cela signifie que vous pouvez mapper des règles arbitraires sur des fichiers arbitraires tels que:

$wp_rewrite->add_external_rule( '^somethingrandom/?$', 'wp-content/wp-uploads/hiddendirectory/somefile.php' );

Ensuite, toute demande adressée à http://site.url/somethingrandom/ sera en fait être traitée par un fichier statique PHP à partir d'un autre répertoire. C'est incroyable, et cela vous permet de faire toutes sortes de choses astucieuses.

Mais cela ne fonctionne qu'avec Apache.

La méthode add_external_rule() écrit ses règles enregistrées dans .htaccess. Nginx n’utilisant pas de fichier .htaccess, les règles externes sont complètement ignorées par ce serveur. Ce dont j'ai besoin, c'est d'un moyen indépendant du serveur pour enregistrer par programme les règles comme celle ci-dessus. Des idées?

6
EAMann

Cela suppose également que les fichiers .htaccess sont activés dans Apache, qui se trouve presque toujours dans un hébergement partagé, mais est souvent désactivé dans les environnements d'entreprise. Une façon d'y parvenir serait d'écrire votre propre fonction add_external_nginx_rule qui enregistre les redirets dans un fichier (vous pouvez utiliser .htaccess même si cela peut prêter à confusion - ce devrait être un fichier caché commençant par. Peu importe le cas) que vous incluez ensuite. dans votre bloc serveur Nginx comme

include /var/www/html/sitefolder/.htaccess;

Dans votre fonction, vous écrivez des redirections au format Nginx, qui est presque identique au format Apache dans de nombreux cas. C'est probablement quelque chose que vous pourriez même transformer en plugin. Cela nécessite une configuration spéciale dans votre fichier de configuration Nginx, mais l'utilisation de .htaccess dans Apache nécessite également son activation dans le fichier de configuration d'Apache. Vous pouvez donc en déduire qu'il s'agit du même concept.

Remarque: je n'ai pas essayé cela, mais je ne vois aucune raison pour que cela ne fonctionne pas. Serait intéressant d'explorer.

Mise à jour: Mark a raison dans les commentaires - cela ne fonctionnerait pas car Nginx ne lit que les fichiers de configuration lors du démarrage ou du rechargement initial; vous devez donc redémarrer Nginx avec toute modification, ce qui rend cette solution problématique du point de vue de la sécurité.

4
TheLastCicada