Tengo un script PHP que maneja el enrutamiento de script y hace todo tipo de cosas elegantes. Originalmente fue diseñado para Apache, pero estoy tratando de migrarlo a nginx para algunas de mis cajas. En este momento, estoy tratando de suavizar las cosas en un servidor de prueba.
Entonces, la forma en que funciona el script es que intercepta todo el tráfico HTTP para el directorio (en Apache) usando un .htaccessarchivo. Así es como se ve:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.+$ index.php [L]
</IfModule>
Muy claro. Todas las solicitudes se ejecutan index.php, simple y llanamente.
Estoy tratando de imitar ese comportamiento en nginx, pero aún no he encontrado una manera. Alguien tiene alguna sugerencia?
Aquí hay una copia de mi nginx.confarchivo en este momento. Tenga en cuenta que fue diseñado para que yo solo trate de hacerlo funcionar; principalmente un trabajo de copiar / pegar.
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, por ejemplo, esto funcionará:/doesNotExist.phpero esto no funcionará (obtendrá 404 en su lugar):/doesNotExist.php¡Lo descubrí por mi cuenta! ¡Si!
Todo lo que necesitaba para el
locationbloque era:Todo lo demás permaneció en gran medida igual.
fuente
Para preservar los argumentos GET, use lo siguiente:
$ is_args se convierte en '?' si $ args no está vacío
O incluso más simple:
fuente
.php, por ejemplo, esto funcionará:/doesNotExist.phpero esto no funcionará (obtendrá 404 en su lugar):/doesNotExist.phpDespués de configurar el directorio raíz, agregue esto
Según su necesidad, puede cambiar la expresión regular ya que necesita gobernar query_string a index.php
fuente
iflograr lo que está pidiendo. wiki.nginx.org/IfIsEvilUn error muy importante tener cuidado de cuando su destino es un archivo PHP es para asegurarse de que lo
return/rewriteregla que su uso no reemplaza lalocation ~ \.phpdirectiva. Si esto sucede, nginx servirá su archivo PHP sin procesarlo, revelando el código fuente PHP. Esto puede ser catastrófico.La forma más segura ya está disponible,
location / { try_files $uri $uri/ /index.php; }Asegúrese de establecer también
index index.phpen sulocation /bloque y descomentar ellocation ~ \.phpbloque incluido en el archivo de configuración predeterminado.fuente