Itu mungkin, tetapi Anda perlu menggunakan RewriteMap
untuk menentukan pemetaan yang dapat Anda gunakan dalam RewriteRule
.
Apache versi 2.2 tidak memiliki akses database langsung sehingga Anda harus menulis skrip yang melakukan kueri sebenarnya lalu mengembalikan hasilnya. Anda dapat menentukan peta ini menggunakan "Program Penulisan Ulang Eksternal" .
Jadi, jika Anda memiliki skrip yang mengambil "cats" dari stdin, lalu menanyakan database, dan mengembalikan "1", Anda akan mendefinisikannya seperti ini:
RewriteMap item_lookup prg:/path/to/item_lookup.php
Arahan itu harus ada di server atau konfigurasi vhost Anda, tidak boleh di file htaccess. Tetapi Anda dapat menggunakan pemetaan dalam file htaccess:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]
Jadi ini mengambil URI /cats
dan menulis ulang ke /item.php?id=1
.
Jika Anda menggunakan Apache 2.4, maka Anda dapat memanfaatkan " Peta DBD" . Anda dapat memasukkan kueri langsung ke definisi peta, tanpa harus menggunakan skrip eksternal. Anda akan menggunakannya dengan cara yang sama.
RewriteMap item_lookup "fastdbd:SELECT id FROM items WHERE name = %s"
Kemudian gunakan dengan cara yang sama:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]
Tanpa menggunakan kueri DBD/FastDBD, saya pikir Anda lebih baik melakukan pencarian basis data dari item.php
, karena Anda akan menduplikasi semua pekerjaan itu dalam skrip eksternal kedua. Cukup tambahkan sesuatu seperti:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^item/([0-9]+)$ /item.php?id=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9-]+)$ /item.php?name=$1 [L]
Dan di item.php
. Anda skrip, periksa keduanya id dan nama . Jika Anda memiliki nama , lakukan pencarian basis data untuk mengubahnya menjadi id. Jauh lebih mudah untuk mengelolanya, Anda tidak perlu memiliki akses konfigurasi server/vhost, dan Anda tidak memperumit masalah dengan menggunakan peta penulisan ulang.