Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

É possível consultar um banco de dados usando um valor passado em uma URL e gravar o resultado da consulta na URL usando mod_rewrite?


É possível, mas você precisa usar um RewriteMap para definir um mapeamento que você pode usar em uma RewriteRule .

O Apache versão 2.2 não tem acesso direto ao banco de dados, então você precisará escrever um script que faça a consulta real e retorne o resultado. Você pode definir este mapa usando o "External Rewriting Program" .

Então, se você tem um script que pega "cats" de stdin, consulta o banco de dados e retorna "1", você o definiria assim:
RewriteMap item_lookup prg:/path/to/item_lookup.php

Essa diretiva deve estar na configuração do seu servidor ou vhost, não pode estar em um arquivo htaccess. Mas você pode usar o mapeamento em um arquivo htaccess:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]

Então isso leva o URI /cats e reescreve isso para /item.php?id=1 .

Se você estiver usando o apache 2.4, poderá aproveitar o " DBD" mapa . Você pode inserir uma consulta diretamente na definição do mapa, ignorando a necessidade de usar um script externo. Você usaria da mesma forma.
RewriteMap item_lookup "fastdbd:SELECT id FROM items WHERE name = %s"

Em seguida, use-o da mesma maneira:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]

Sem usar uma consulta DBD/FastDBD, acho que você honestamente é melhor apenas fazer a pesquisa de banco de dados de item.php , já que você estaria duplicando todo esse trabalho em um segundo script externo de qualquer maneira. Basta adicionar algo como:
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]

E no seu item.php script, verifique os dois id e nome . Se você tiver um nome , faça a pesquisa no banco de dados para transformá-lo em um id. É muito mais fácil de gerenciar, você não precisa ter acesso à configuração do servidor/vhost e não está complicando as coisas usando um mapa de reescrita.