Untuk mencerminkan seluruh situs web sebagai HTML statis,
Saya ingin mengonversi URL http://example.com/script.php?t=12
ke http://example.com/script.php_t=12
.
Pemberitahuan ?
dalam URL sedang dikonversi ke _
.
Ini akan memungkinkan nginx atau apache untuk menyajikan file-file ini dari disk sebagai HTML mentah yang kami peroleh dan simpan dari wget
- satu file untuk setiap URL - bukan sebagai file PHP.
Apakah mungkin untuk melakukannya melalui penulisan ulang URL Nginx?
http://example.com/script.php?a=1&t=3
akan memerlukan beberapa tindakan menulis ulang super mewaht
sepertif
,u
, dllJawaban:
Saya berhasil menggunakan try_files:
Ini akan mencoba menemukan file pada disk yang dinamai sesuai pola yang Anda berikan dengan "_" alih-alih "?".
Konfigurasi lebih lanjut tergantung pada bagaimana Anda menyimpan file statis seperti gambar atau stylesheet. Anda dapat menambahkan fallback mencoba membacanya tanpa disk bentuk string kueri seperti:
sumber
location ~ \.php$
kita bisa mulaitry_files
bekerja, tetapi itu tidak berhasillocation /
Sesuatu di sepanjang garis:
sumber
?
jawaban saya yang digunakan..*
klausa yang lebih ketat di param menulis ulang pertama. Ini sangat membantu!Saya tidak berpikir Anda akan dapat melakukan ini dengan vanilla nginx tetapi jika Anda bersedia menginstal modul Lua untuk nginx ( http://wiki.nginx.org/HttpLuaModule ) Anda dapat melakukannya.
Mengujinya secara lokal dan tampaknya melakukan apa yang Anda cari. Jika Anda ingin agar params lain dipisahkan oleh ampersand, ubah blok rewrite_by_lua menjadi
sumber
Ini bekerja pada nginx / 1.6.2.
Tetapi secara pribadi saya akan menggunakan
try_files
solusi dengan fallback ke URI asli jika ada .Misalnya jika Anda memiliki
script.php
pada disk itu akan mencoba dulu, dan kemudian, jika tidak ada, itu akan berlakuscript.php_t=12
.try_files
membutuhkan versi nginx yang cukup baru.Dan jika ini tidak cukup, Anda bisa melakukan ini di dalam
if
:sumber
?
ke akhir penulisan ulang Anda di sana sehingga params kueri tidak ditambahkan ke sana ..)try_files
akan berhenti$uri
jika ada blok lokasi yang cocok dengan itu, atau file untuk itu (permintaan tanpa get args) - apakah itu masalahnya??
tidak memiliki efek yang terlihat pada file statis, Anda hanya akan melihat permintaan tambahan di log akses Anda; jika Anda peduli tentang hal itu, pastikan tambahkan tanda tanyaThe wiki mengatakan
Maka
rewrite ^ ${uri}_$args? last;
harus bekerja.sumber
rewrite ^ $uri_$args? last;
Jawaban yang disarankan di atas harus bekerja. Namun Anda melihat seberapa sensitifnya URL Anda. Karena nginx mencoba memeriksa apakah nama file ada di server terlebih dahulu, setiap parameter tambahan akan membuangnya.
Saran saya adalah meninggalkan URL apa adanya dan mengarahkannya ke file yang benar dengan php. Anda memiliki akses ke
t
parameter.sumber