Възможно е, но трябва да използвате RewriteMap
за да дефинирате съпоставяне, което можете да използвате в RewriteRule
.
Apache версия 2.2 няма директен достъп до базата данни, така че ще трябва да напишете скрипт, който изпълнява действителната заявка, след което връща резултата. Можете да дефинирате тази карта с помощта на "Програма за външно пренаписване" .
Така че, ако имате скрипт, който взема "cats" от stdin, след това прави заявка към базата данни и връща "1", бихте го дефинирали така:
RewriteMap item_lookup prg:/path/to/item_lookup.php
Тази директива трябва да е във вашия сървър или конфигурация на vhost, не може да бъде във файл htaccess. Но можете да използвате картографирането във файл htaccess:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]
Така че това отнема URI /cats
и пренаписва това в /item.php?id=1
.
Ако използвате apache 2.4, тогава можете да се възползвате от " DBD" карта . Можете да вмъкнете заявка направо в дефиницията на картата, заобикаляйки необходимостта от използване на външен скрипт. Ще го използвате по същия начин.
RewriteMap item_lookup "fastdbd:SELECT id FROM items WHERE name = %s"
След това го използвайте по същия начин:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]
Без да използвате DBD/FastDBD заявка, мисля, че е по-добре просто да направите справка в базата данни от item.php
, тъй като така или иначе ще дублирате цялата тази работа във втори външен скрипт. Просто добавете нещо като:
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]
И във вашия item.php
скрипт, проверете и за двата id ииме . Ако имаш имената , направете търсене в база данни, за да превърнете това в идентификатор. Много по-лесно е за управление, не е необходимо да имате достъп до конфигурацията на сървър/vhost и не усложнявате нещата, като използвате карта за пренаписване.