ugrás a tartalomhoz

.htaccess

win97fan · Ápr. 2. (P), 19.14
Sziasztok

A segítségeteket kérném. A google jóbarátom és kb. 200 ezer megoldást találtam, viszont jobb lett volna 1 amit megértek és működik.

Szóval tudom sokaknak alap a kérdésem, de én most szeretném megtanulni.

A probléma: .htaccess fájl kezelése

Adott egy ilyen txt docum a gyökér könyvtárban:

RewriteEngine on
Options -Indexes
ErrorDocument 404 http://domain.hu/404.php
ErrorDocument 500 http://domain.hu/404.php

Adott egy oldal amin a tartalom változik aszerint, hogy az url-ben milyen id található.

Az url id alapján lekéri a blog címét, szövegét és egyéb adatokat. Amit szeretnék elérni, hogy az url ben ehelyett:

http://domain.hu/index.php?id=1

Ez legyen pl:

http://domain.hu/hogyan_fujjuk_ki_purhabbal_a_kocsi_aljat

Tehát az index.php?id=1 rész helyett az aktuális blog címe lenne.

Néhány esetben az url tartalmaz még egy adatot is miszerint (nem mindig):

http://domain.hu/index.php?id=1&felhasznalo=2

Összegezve: azt szeretném elérni, hogy az urlben a blog címe látszódjon, de a háttérben tudjam lekérni, kezelni a get adatokat.

Az adatokat mysql-ből kérem le, és a get adatokat urlencode-al kérem le ha ez számít ebben az esetben.

Köszönöm ha segítetek, szeretném megérteni a működését, hogy a későbbiekben ha bővítem az url-t más adatokkal, akkor is tudjam majd kezelni.
 
1

Némi keveredés van

Pepita · kedd, 13.13
Először is tisztában kell(ene) lenned azzal, hogy mi az a get paraméter és mi a különbség egy id és a "blog címe" (ez ugye url-friendly formában) között.
Olyan példákat keress, ami tartalmazza: <IfModule mod_rewrite.c>

Viszont fontos tudni, hogy egy RewriteRule nem fogja az id-t címre (vagy vissza) cserélni, mindössze a ? jel, az "index.php" és hasonló "csúnyaságok" "formázására" használható.

Például ha nem szeretném az URL-ekben látni az "index.php"-t ÉS a domain után folytatólagosan "/" jelekkel elválasztva (kvázi könyvtárként) szeretném megadni az egyéb paramétereket ÉS a keretrendszerem is alkalmas rá, akkor csinálhatok valami ilyesmit:
DirectoryIndex index.php
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond $1 !^(index\.php|bin)
    RewriteRule ^(.*)$ index.php?$1 [L]
</IfModule>
Jelentése:
- Az elsődlegesen "megjelenítendő" tartalom az index.php.
- HA van RewriteEngine, akkor:
- Nézzük meg, hogy a kérés tartalmazza-e az index.php-t VAGY a bin könyvtárat
- HA igen: nincs átírási művelet, közvetlenül hajtsuk végre a kérést
- HA nem: adjuk oda a kérés stringet az index.php-nak egyetlen paraméterként egy ? jel után. Itt van szerepe a keretrendszernek, hogy annak routingja megfelelően le tudja-e kezelni így.

Mindezek után a keretrendszeren belül kell megoldanod azt, hogy mit kaptál a ? jel után. Azt is, hogy ha csak 1 paramétert, akkor az egy blog cím és kéne belőle blog_id-t keresni, és azt is, hogy ha 2 paraméter, akkor a második egy user_id.
Amennyiben a keretrendszer alkalmas rá, akkor egy ilyen url-ből:
http://domain.hu/hogyan_fujjuk_ki_purhabbal_a_kocsi_aljat/123
ki tudod válogatni, hogy:
- a "hogyan_fujjuk_ki_purhabbal_a_kocsi_aljat" részből keresned kell egy blog_id-t, ÉS
- mindezt a user_id = 123 felhasználó kérte.

Fontos tudni, hogy ehhez olyan keretrendszer kell, amelyik a / jelek mentén szétbontja a requestet szegmensekre, és mindig ugyanazt jelenti ugyanaz a szegmens. Tehát önmagában egy .htaccess / rewrite nem oldja meg.
2

Fontos tudni, hogy ehhez

kuka · szerda, 06.17
Fontos tudni, hogy ehhez olyan keretrendszer kell, amelyik a / jelek mentén szétbontja a requestet szegmensekre, és mindig ugyanazt jelenti ugyanaz a szegmens.
Nekem úgy tűnt, hogy nem keretrendszerről van szó, hanem „kézzel írt” PHP szkriptről. Amely esetben a fentebb leírt hozzácsapott részt „/hogyan_fujjuk_ki_purhabbal_a_kocsi_aljat/123” formában megkapja a $_SERVER['PATH_INFO']-ban és onnantól tetszés szerint értelmezheti.
3

+1

Pepita · szerda, 09.42
Ha „kézzel írt” PHP szkript, akkor valóban neki kell feldolgoznia, ekkor én javasolnám a $_SERVER['QUERY_STRING'] értékét is megnézni.
4

Ha már query string

Endyl · szerda, 10.51
Ha már query string, akkor inkább $_GET, vagy még inkább filter_input(INPUT_GET, ...) és társai.