Htaccess krajšanje urljev
 
Gizmo 25. okt 2013 10:09:48 Pridružen od:
25. feb 2009
2647 objav
2589 396 55
#1

Rad bi v .htaccess uredil par urljev, ki so zdaj v obliki domena.com/mapa/blabla?3252465. Zanima me, kako bi stran funkcionirala v obliki domena.com/mapa/blabla, obenem pa bi se rad tudi kaj uporabnega naučil, ampak bolj kot gledam, manj mi je jasno. Ima morda kdo tu kak uporaben predlog oziroma delujoč primer, da lahko sprobam?


všeč(0) ni všeč(0) spam(0)
 
krejzi 25. okt 2013 13:37:44 Pridružen od:
14. mar 2013
558 objav
915 213 12
#2

Začneš tako, da v htaccess postaviš nekaj takega:




RewriteEngine On

RewriteCond %{REQUESTFILENAME} !-f

RewriteCond %{REQUEST
FILENAME} !-d

RewriteRule ^(.*)$ index.php [L,QSA]




Prva vrstica pomeni, da se vklopi mod_rewrite, ki mora biti nameščen na apache. Prav tako mora v apache.conf biti določeno




AllowOverride FileInfo




ali




AllowOverride All




ki prepriča apache, da upošteva Rewrite v .htaccessu



Druga in tretja vrstica (RewriteCond) sta zato, da se url rewrite izvede samo, če datoteka (-f) in direktorij (-d) NE obstajata.



Zadnja vrstica je dejanski rewrite. Kar naredi je to, da karkoli vpišeš po tisti mapi, v kateri se .htaccess nahaja, bo request še vedno obdelal index.php.

Če želiš izvedet, kaj dejansko je bilo poslano, moraš to obdelat v php. Izpišeš si vrednost spremenljivke $_SERVER in gledaš, kaj se dogaja, ko spreminjaš url.



Za bolj kompleksne rewrite se moraš poglobit v regular expressione. Ampak načeloma zgornje 4 vrstice zadoščajo, če vse requeste obdela index.php, razen za tiste datoteke, ki obstajajo (npr pripadajoče slike, stylesheet, skripte...)



Toliko za začetek, za več pa, veselo na delo in eksperimentirat...


všeč(3) ni všeč(0) spam(0)
 
Gizmo 25. okt 2013 19:31:14 Pridružen od:
25. feb 2009
2647 objav
2589 396 55
#3

Hvala, to sem tudi sam že ugotovil. Problem pa je v tem, da sploh ne vem, kako bi se res lotil napisati rešitev, nikjer ni nobenega vsaj približno podobnega primera. Kar sem gledal je vse precej specifično, ali pa je po dvanajst rešitev za isti problem, pa nobena ne dela.


všeč(0) ni všeč(0) spam(0)
 
krejzi 25. okt 2013 21:12:04 Pridružen od:
14. mar 2013
558 objav
915 213 12
#4

Najbolj klasične rešitve so takšne, da je url rewrite:




RewriteRule ^(.*)$ index.php?cmd=$1 [L,QSA]




V tem primeru imaš tralala/neki rewritano v index.php?cmd=tralala/neki



Če imaš pripravljeno neko podatkovno bazo vsebin, kjer je eden izmed stolpcev recimo SEOfancyurl, lahko vrednost $_GET-a 'cmd' pošlješ v bazo in dobiš na ta način prave podatke ven in pokažeš vsebino, namesto da kličeš index.php?id=123. Deluje na isti način, le poizvedba sprašuje po drugem polju.


všeč(1) ni všeč(0) spam(0)
 
Gizmo 26. okt 2013 22:55:37 Pridružen od:
25. feb 2009
2647 objav
2589 396 55
#5

S kar nekaj kolobarjenja sem prišel do delujoče rešitve. Pravzaprav zadeva pač izbriše cel query string, kar reši moj problem:



RewriteEngine On

RewriteCond %{QUERY_STRING} .

RewriteRule ^(.*)$ $1/? [R=301,L]



Zdaj je seveda vse precej bolj jasno, edino ne vem, kaj dela ta ? na koncu RewriteRule?


všeč(0) ni všeč(0) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se