Saya memiliki skrip PHP yang menangani perutean skrip dan melakukan segala macam hal mewah. Awalnya dirancang untuk Apache, tetapi saya mencoba untuk memigrasikannya ke nginx untuk beberapa kotak saya. Saat ini, saya mencoba untuk memuluskan berbagai hal di server uji.
Jadi cara kerja skrip adalah bahwa ia memotong semua lalu lintas HTTP untuk direktori (di Apache) menggunakan .htaccess
file. Begini tampilannya:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.+$ index.php [L]
</IfModule>
Cukup mudah. Semua permintaan dijalankan index.php
, sederhana dan sederhana.
Saya ingin meniru perilaku itu di nginx, tapi saya belum menemukan cara. Adakah yang punya saran?
Ini salinan nginx.conf
file saya saat ini. Perhatikan bahwa itu dirancang bagi saya untuk hanya mencoba membuatnya bekerja; sebagian besar pekerjaan salin / tempel.
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
, misalnya ini akan berfungsi/doesNotExist.ph
/doesNotExist.php
Saya menemukan jawabannya sendiri! Ya!
Yang saya butuhkan untuk
location
blok adalah:Segala sesuatu yang lain sebagian besar tetap sama.
sumber
Untuk menyimpan argumen GET gunakan yang berikut:
$ is_args menjadi '?' jika $ args tidak kosong
Atau bahkan lebih sederhana:
sumber
.php
, misalnya ini akan berfungsi/doesNotExist.ph
/doesNotExist.php
Setelah mengatur dir root tambahkan ini
Menurut kebutuhan Anda, Anda dapat mengubah regex karena Anda perlu mengatur query_string menjadi index.php
sumber
if
mencapai apa yang dia minta. wiki.nginx.org/IfIsEvilSatu perangkap yang sangat penting untuk berhati-hati ketika target Anda adalah file PHP adalah untuk memastikan apa pun
return
/rewrite
aturan yang Anda gunakan tidak menggantikanlocation ~ \.php
arahan. Jika ini terjadi, nginx akan menyajikan file PHP Anda tanpa merendernya, mengungkapkan kode sumber PHP. Ini bisa menjadi bencana besar.Cara teraman sudah disediakan,
location / { try_files $uri $uri/ /index.php; }
Pastikan Anda juga mengatur
index index.php
dilocation /
blok Anda dan batalkan komentar padalocation ~ \.php
blok yang termasuk dalam file konfigurasi default.sumber