Bagaimana cara mengonversi .htaccess yang sangat sederhana ini ke Nginx?
Saya menggunakan ini .htaccess
yang meneruskan semuanya setelah URL ke $param
, jadi
example.com/news/id
pergi ke PHP sebagai $_GET['param']='news/id'
. Tapi Nginx selalu melempar saya ke halaman 404.
Saya .htaccess
:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule (.*) index.php?param=$1
Apa yang saya coba di Nginx default.conf
:
server {
listen 80;
listen [::]:80;
server_name domain.com;
root /var/www/html;
location / {
if (!-f $uri){
set $rule_0 1$rule_0;
}
if (!-d $uri){
set $rule_0 2$rule_0;
}
if ($rule_0 = "21"){
rewrite ^(.*) index.php?param=$1;
}
}
}
Jawaban
1 MichaelHampton
Anda tidak menggunakan if
sama sekali di sini, juga tidak memeriksa keberadaan file secara manual. Pola umum ini ditangani oleh try_files
.
Sebagai contoh:
location / {
try_files $uri $uri/ /index.php?param=$uri;
}
(Jika aplikasi web Anda rusak dan tidak dapat menangani awalan /
di URI, perbaiki aplikasi web jika memungkinkan, atau lihat pertanyaan ini jika tidak.)
1 SandroBenevides
Saya bisa memperbaikinya menggunakan aturan ini:
server{
try_files $uri $uri/ @rewrite;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=$1;
}
}
Jika Anda memiliki lokasi / {} tanpa petunjuk di dalamnya, hapuslah.
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'