sql >> Database >  >> RDS >> Mysql

Is het mogelijk om een ​​database te doorzoeken met behulp van een waarde die in een URL is doorgegeven, en het resultaat van de query naar de URL te schrijven met mod_rewrite?

Het is mogelijk, maar je moet een RewriteMap gebruiken om een ​​toewijzing te definiëren die u kunt gebruiken binnen een RewriteRule .

Apache versie 2.2 heeft geen directe databasetoegang, dus u moet een script schrijven dat de eigenlijke query uitvoert en vervolgens het resultaat retourneert. U kunt deze kaart definiëren met behulp van het "Extern herschrijfprogramma" .

Dus als je een script hebt dat "cats" van stdin neemt, vervolgens de database doorzoekt en "1" retourneert, zou je het als volgt definiëren:

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

Die richtlijn moet in uw server- of vhost-configuratie staan, het kan niet in een htaccess-bestand staan. Maar u kunt de toewijzing in een htaccess-bestand gebruiken:

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

Dit kost dus de URI /cats en herschrijft dat naar /item.php?id=1 .

Als u apache 2.4 gebruikt, kunt u profiteren van de " DBD" kaart . U kunt een query rechtstreeks in de kaartdefinitie invoegen, zonder dat u een extern script hoeft te gebruiken. Je zou het op dezelfde manier gebruiken.

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

Gebruik het dan op dezelfde manier:

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

Zonder een DBD/FastDBD-query te gebruiken, denk ik dat je eerlijk gezegd beter af bent door gewoon de database op te zoeken vanuit item.php , aangezien je al dat werk sowieso in een tweede extern script zou dupliceren. Voeg gewoon iets toe als:

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]

En in uw item.php script, controleer op beide id en naam . Als je een naam hebt , doe de database-lookup om daar een id van te maken. Het is veel gemakkelijker te beheren, u hoeft geen server/vhost-configuratietoegang te hebben en u maakt de zaken niet ingewikkelder door een herschrijfkaart te gebruiken.




  1. Installeer PostgreSQL op Ubuntu 20.04

  2. MySQL zet de huidige datum in een DATETIME-veld bij invoegen

  3. pdo_mysql installeren op Amazon EC2 met PHP 5.5

  4. mysql-query die false retourneert, zelfs als er waarden in de tabel bestaan? Proberen te vinden of niet in de tabel?