Mysql
 sql >> Database >  >> RDS >> Mysql

È possibile eseguire query su un database utilizzando un valore passato in un URL e scrivere il risultato della query nell'URL utilizzando mod_rewrite?

È possibile, ma è necessario utilizzare una RewriteMap per definire una mappatura che puoi usare all'interno di una RewriteRule .

Apache versione 2.2 non ha accesso diretto al database, quindi dovrai scrivere uno script che esegua la query effettiva e poi restituisca il risultato. Puoi definire questa mappa utilizzando il "Programma di riscrittura esterno" .

Quindi, se hai uno script che prende "cats" da stdin, quindi interroga il database e restituisce "1", lo definiresti in questo modo:

RewriteMap item_lookup prg:/path/to/item_lookup.php

Quella direttiva deve essere nella configurazione del tuo server o vhost, non può essere in un file htaccess. Ma puoi usare la mappatura in un file htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]

Quindi questo prende l'URI /cats e lo riscrive in /item.php?id=1 .

Se stai usando apache 2.4, puoi sfruttare il " mappa DBD" . Puoi inserire una query direttamente nella definizione della mappa, evitando di dover utilizzare uno script esterno. Lo useresti allo stesso modo.

RewriteMap item_lookup "fastdbd:SELECT id FROM items WHERE name = %s"

Quindi usalo allo stesso modo:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]

Senza usare una query DBD/FastDBD, penso che tu stia onestamente meglio semplicemente facendo la ricerca nel database da item.php , dal momento che duplicheresti comunque tutto quel lavoro in un secondo script esterno. Basta aggiungere qualcosa come:

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 nel tuo item.php script, controlla entrambi gli id e nome . Se hai un nome , esegui la ricerca nel database per trasformarlo in un id. È molto più semplice da gestire, non è necessario disporre dell'accesso alla configurazione del server/host virtuale e non stai complicando le cose utilizzando una mappa di riscrittura.