J'ai un script PHP qui gère le routage des scripts et fait toutes sortes de choses fantaisistes. Il a été initialement conçu pour Apache, mais j'essaie de le migrer vers nginx pour quelques-unes de mes boîtes. En ce moment, j'essaie de lisser les choses sur un serveur de test.
Donc, la façon dont le script fonctionne est qu'il intercepte tout le trafic HTTP pour le répertoire (dans Apache) à l'aide d'un .htaccess
fichier. Voici à quoi cela ressemble:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.+$ index.php [L]
</IfModule>
Assez simple. Toutes les demandes sont traitées de manière index.php
claire et simple.
Je cherche à imiter ce comportement sur nginx, mais je n'ai pas encore trouvé de moyen. Quelqu'un a des suggestions?
Voici une copie de mon nginx.conf
dossier en ce moment. Notez qu'il a été conçu pour moi juste pour essayer de le faire fonctionner; principalement un travail de copier / coller.
user www-data;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
# multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type text/plain;
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name swingset.serverboy.net;
access_log /var/log/nginx/net.serverboy.swingset.access_log;
error_log /var/log/nginx/net.serverboy.swingset.error_log warn;
root /var/www/swingset;
index index.php index.html;
fastcgi_index index.php;
location ~ \.php {
include /etc/nginx/fastcgi_params;
keepalive_timeout 0;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
}
}
.php
, par exemple cela fonctionnera/doesNotExist.ph
/doesNotExist.php
Je l'ai compris moi-même! Ouais!
Tout ce dont j'avais besoin pour le
location
bloc était:Tout le reste est resté en grande partie le même.
la source
Pour conserver les arguments GET, utilisez ce qui suit:
$ is_args devient '?' si $ args n'est pas vide
Ou encore plus simple:
la source
.php
, par exemple cela fonctionnera/doesNotExist.ph
/doesNotExist.php
Après avoir défini le répertoire racine, ajoutez ceci
En fonction de vos besoins, vous pouvez modifier l'expression régulière car vous avez besoin de la règle query_string en index.php
la source
if
d'accomplir ce qu'il demande. wiki.nginx.org/IfIsEvilUn écueil très important à prendre en compte lorsque votre cible est un fichier PHP est de vous assurer que la
return
/rewrite
règle que vous utilisez ne remplace pas lalocation ~ \.php
directive. Si cela se produit, nginx servira votre fichier PHP sans le rendre, révélant le code source PHP. Cela peut être catastrophique.Le moyen le plus sûr est déjà fourni,
location / { try_files $uri $uri/ /index.php; }
Assurez-vous que vous avez également défini
index index.php
votrelocation /
bloc et décommentez lelocation ~ \.php
bloc inclus dans le fichier de configuration par défaut.la source