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

Er det muligt at forespørge i en database ved hjælp af en værdi, der sendes i en URL, og skrive resultatet af forespørgslen til URL'en ved hjælp af mod_rewrite?

Det er muligt, men du skal bruge et RewriteMap for at definere en mapping, som du kan bruge i en RewriteRule .

Apache version 2.2 har ikke direkte databaseadgang, så du bliver nødt til at skrive et script, der udfører selve forespørgslen og derefter returnere resultatet. Du kan definere dette kort ved hjælp af "External Rewriting Program" .

Så hvis du har et script, der tager "cats" fra stdin, derefter forespørger databasen og returnerer "1", ville du definere det sådan:

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

Det direktiv skal være i din server eller vhost-konfiguration, det kan ikke være i en htaccess-fil. Men du kan bruge tilknytningen i en htaccess-fil:

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

Så dette tager URI'en /cats og omskriver det til /item.php?id=1 .

Hvis du bruger apache 2.4, så kan du drage fordel af " DBD" kort . Du kan indsætte en forespørgsel direkte i kortdefinitionen uden at skulle bruge et eksternt script. Du ville bruge det på samme måde.

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

Brug det derefter på samme måde:

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

Uden at bruge en DBD/FastDBD-forespørgsel, tror jeg, at du ærlig talt er bedre stillet blot at foretage databaseopslag fra item.php , da du alligevel ville duplikere alt det arbejde i et andet eksternt script. Bare tilføje noget som:

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]

Og i din item.php script, tjek for begge id og navn . Hvis du har et navn , lav databaseopslaget for at gøre det til et id. Det er meget nemmere at administrere, du behøver ikke at have server/vhost-konfigurationsadgang, og du komplicerer ikke sagerne ved at bruge et omskrivningskort.




  1. MySQL:Hvorfor er score altid 1 i fuldtekst?

  2. psycopg2 og SQL-injektionssikkerhed

  3. gruppe efter klausul kolonnenavn uden at vælge det i udvalgslisten

  4. Linux og Oracle Instant Client