mod_rewrite, php dan file .htaccess

Nov 05 2008

Saya membuat kode CMS kecil untuk mendapatkan pemahaman yang lebih baik tentang cara kerjanya dan untuk mempelajari beberapa hal baru tentang PHP. Namun saya menemukan masalah.

Saya ingin menggunakan mod_rewrite (meskipun jika seseorang memiliki solusi yang lebih baik, saya akan mencobanya) untuk menghasilkan URL bersih yang bagus, jadi site.com/index.php?page=2 malah bisa menjadi site.com/tools

Dengan pemahaman saya, saya perlu mengubah file .htaccess saya setiap kali saya menambahkan halaman baru dan di sinilah saya menemukan masalah, PHP saya terus memberi tahu saya bahwa saya tidak dapat memperbaruinya karena tidak memiliki izin. Sedikit chmod cepat mengungkapkan bahwa bahkan dengan izin 777 itu tidak dapat melakukannya, apakah saya melewatkan sesuatu?

Sumber saya untuk instruksi mod_rewrite saat ini adalah halaman ini di sini jika itu penting / berguna.

Jawaban

10 Ken Nov 05 2008 at 17:23

Salah satu pendekatannya adalah menulis ulang semuanya ke skrip penanganan

RewriteEngine on
RewriteBase /

# only rewrite if the requested file doesn't exist
RewriteCond %{REQUEST_FILENAME} !-s 

# pass the rest of the request into index.php to handle     
RewriteRule ^(.*)$ /index.php/$1 [L]

jadi jika Anda memiliki permintaan untuk http://yourserver/foo/bar/

apa yang sebenarnya Anda dapatkan adalah permintaan http://yourserver/index.php/foo/bar- dan Anda dapat meninggalkan index.php untuk memutuskan apa yang harus dilakukan dengan / foo / bar (menggunakan $ _SERVER ['PATH_INFO'] - tom )

Anda hanya perlu mengubah .htaccess untuk pertama kalinya. Semua permintaan masa depan untuk file yang tidak ada kemudian dapat ditangani dalam PHP.

Anda mungkin juga menemukan dokumen untuk mod_rewrite berguna - tetapi tetap sederhana atau bersiap untuk kehilangan banyak waktu tidur dan rambut melacak kesalahan yang tidak jelas.

2 Tomalak Nov 05 2008 at 17:26

PHP Anda harus karena alasan yang sangat jelas tidak dapat dimodifikasi .htaccess. Bahkan jika Anda berhasil, saya tidak yakin apakah itu bijaksana.

Bagaimana jika menggunakan pengaturan yang lebih abstrak sehubungan dengan aturan mod_rewrite? Tentukan pola umum URL Anda, seperti yang Anda ingin gunakan. Sebagai contoh:

/ object / action / id

Kemudian tulis sekumpulan aturan yang merutekan ulang permintaan HTTP ke halaman PHP, yang selanjutnya akan membuat keputusan tentang halaman yang akan dijalankan (misalnya, dengan menyertakan skrip PHP yang relevan).

RewriteRule ^ / (\ w +) /? (\ W +)? /? (\ D +)?$ /index.php?object=$1 & tindakan =$2&id=$3 [nocase]

Dengan cara ini Anda tidak perlu .htaccessterlalu sering memperbarui dan tetap fleksibel.