Mysql
 sql >> база данни >  >> RDS >> Mysql

Възможно ли е да се направи запитване към база данни, като се използва стойност, предадена в URL адрес, и да се запише резултатът от заявката в URL адреса, като се използва mod_rewrite?

Възможно е, но трябва да използвате 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 и не усложнявате нещата, като използвате карта за пренаписване.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL връща 1 изображение за всеки продукт

  2. Съхраняване на променливата $date в базата данни на mysql с помощта на php

  3. Кое е по-добро, имплицитно или явно присъединяване?

  4. Entity framework 5.0 първо код с MySQL в WPF

  5. #1139 - Получих грешка „операнд за повторение невалиден“ от регулярния израз