Saya telah mengonversi sebagian besar aturan mod_rewrite Apache HTTPd saya ke modul HttpRewrite nginx (yang memanggil PHP-FPM melalui FastCGI pada setiap permintaan dinamis). Aturan sederhana yang ditentukan oleh lokasi sulit berfungsi dengan baik:
location = /favicon.ico { rewrite ^(.*)$ /_core/frontend.php?type=ico&file=include__favicon last; }
Saya masih mengalami masalah dengan ekspresi reguler, yang diuraikan dalam mod_rewrite seperti ini (perhatikan bahwa saya menerima garis miring dalam aturan, serta menambahkan string kueri ke setiap permintaan):
mod_rewrite
# File handler
RewriteRule ^([a-z0-9-_,+=]+)\.([a-z]+)$ _core/frontend.php?type=$2&file=$1 [QSA,L]
# Page handler
RewriteRule ^([a-z0-9-_,+=]+)$ _core/frontend.php?route=$1 [QSA,L]
RewriteRule ^([a-z0-9-_,+=]+)\/$ _core/frontend.php?route=$1 [QSA,L]
RewriteRule ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)$ _core/frontend.php?route=$1/$2 [QSA,L]
RewriteRule ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)\/$ _core/frontend.php?route=$1/$2 [QSA,L]
RewriteRule ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)$ _core/frontend.php?route=$1/$2/$3 [QSA,L]
RewriteRule ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)\/$ _core/frontend.php?route=$1/$2/$3 [QSA,L]
Saya telah membuat konfigurasi server berikut untuk situs tersebut, tetapi saya menemukan aturan yang tidak cocok setelah menguraikan permintaan (misalnya; GET /user/auth
):
mencoba menulis ulang nginx
location / {
# File handler
rewrite ^([a-z0-9-_,+=]+)\.([a-z]+)?(.*)$ /_core/frontend.php?type=$2&file=$1&$3 break;
# Page handler
rewrite ^([a-z0-9-_,+=]+)(\/*)?(.*)$ /_core/frontend.php?route=$1&$2 break;
rewrite ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)(\/*)?(.*)$ /_core/frontend.php?route=$1/$2&$3 break;
rewrite ^([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)\/([a-z0-9-_,+=]+)(\/*)?(.*)$ /_core/frontend.php?route=$1/$2/$3&$4 break;
}
Apa saran Anda untuk menangani File Handler saya (yang hanya filename.ext
), dan Page Handler saya (yang merupakan permintaan rute unik dengan hingga 3 properti yang ditentukan oleh garis miring)?
Karena saya belum mendapat tanggapan dari ini, saya juga tidak yakin apakah ini akan menimpa parser PHP saya yang didefinisikan dengan location ~ \.php {}
, yang disertakan sebelum aturan penulisan ulang ini.
Poin bonus jika saya dapat menyelesaikan masalah penguraian tanpa perlu menggunakan aturan baru untuk setiap jumlah properti rute.