Eu tenho um script PHP que lida com roteamento de scripts e faz todo tipo de coisas sofisticadas. Ele foi originalmente projetado para o Apache, mas estou tentando migrá-lo para o nginx para algumas das minhas caixas. No momento, estou tentando facilitar as coisas em um servidor de teste.
Portanto, a maneira como o script funciona é que ele intercepta todo o tráfego HTTP do diretório (no Apache) usando um .htaccess
arquivo. Aqui está o que parece:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.+$ index.php [L]
</IfModule>
Bem direto. Todas as solicitações são executadas index.php
, pura e simplesmente.
Estou procurando imitar esse comportamento no nginx, mas ainda não encontrei uma maneira. Alguém tem alguma sugestão?
Aqui está uma cópia do meu nginx.conf
arquivo no momento. Observe que ele foi projetado para eu apenas tentar fazê-lo funcionar; principalmente um trabalho de copiar / colar.
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;
}
}
}
Para preservar os argumentos GET, use o seguinte:
$ is_args se torna '?' se $ args não estiver vazio
Ou ainda mais simples:
fonte
Depois de definir o diretório raiz, adicione este
De acordo com a sua necessidade, você pode alterar o regex conforme precisar governar query_string para index.php
fonte
if
que realizar o que ele está pedindo. wiki.nginx.org/IfIsEvilUma armadilha muito importante ter o cuidado de quando seu destino é um arquivo PHP é ter a certeza que quer
return
/rewrite
regra que uso não substituem alocation ~ \.php
directiva. Se isso acontecer, o nginx servirá seu arquivo PHP sem renderizá-lo, revelando o código-fonte PHP. Isso pode ser catastrófico.A maneira mais segura já é fornecida,
location / { try_files $uri $uri/ /index.php; }
Certifique-se de definir também
index index.php
no seulocation /
bloco e descomente olocation ~ \.php
bloco incluído no arquivo de configuração padrão.fonte