Bagaimana sistem MVC di mana url berada dalam formulir ini memaksa semua permintaan melalui file index.php tunggal?
http://www.example.com/foo/bar/baz
http://www.example.com/goo/car/caz/SEO-friendly-name-of-the-object
http://www.example.com/hey/you
EDIT: Ketika saya mencoba aturan penulisan ulang di bawah ini saya mendapatkan kesalahan ini:
[error] [client 127.0.0.1] Invalid URI in request GET / HTTP/1.1
[error] [client 127.0.0.1] Invalid URI in request GET /abc HTTP/1.1
EDIT: Oh, ini adalah konten lengkap dari /index.php. Ketika saya menghapus aturan penulisan ulang, itu menghasilkan '/' atau '/index.php' atau saya mendapatkan 404 untuk hal lain.
<?php
echo htmlspecialchars($_SERVER['REQUEST_URI']);
?>
ASK: Saya menambahkan a / di depan index.php dalam aturan penulisan ulang dan kemudian bekerja:
ASK LAGI: Ternyata / hanya diperlukan karena saya menjalankan 2.2.4. Ketika saya memutakhirkan ke 2.2.11 / tidak lagi diperlukan.
apache-2.2
php
mod-rewrite
mvc
jmucchiello
sumber
sumber
Jawaban:
Jika Anda menggunakan Apache, gunakan penulisan ulang melalui
mod_rewrite
:Ini akan menulis ulang URL Anda ke »index.php? Q = foo / bar / baz« transparan.
Baris 2. dan 3. memberi tahu mesin penulisan ulang untuk tidak menulis ulang URL jika menunjuk ke file atau direktori yang ada. Ini diperlukan untuk memiliki akses ke file nyata yang disediakan oleh server httpd.
sumber
Kode di bawah ini menggunakan mod_rewrite Apache untuk menulis ulang semua URL yang tidak mengarah ke file fisik atau direktori untuk dipetakan ke index.php. Hasil akhirnya adalah:
Aturan penulisan ulang:
Penjelasan:
Kedua baris di atas menentukan bahwa aturan ini tidak berlaku untuk file biasa (-f) atau direktori (-d).
Informasi lebih lanjut tentang cara membuat aturan mod_rewrite dapat dikumpulkan dari situs web Apache: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html .
sumber