ugrás a tartalomhoz

ékezetek a htaccess-ben

csabessz47 · 2012. Szep. 12. (Sze), 22.15
Sziasztok,

Jelenleg fejlesztés alatt van egy oldal, ahol lesz keresés is. Amire rákeresnek bekerül az url-be, a találatokat megjelenítő oldalon innen olvassa ki, és ezután escapeli a db lekérdezéshez (post helyett js-el van átírányítva, hogy szép legyen az url).

Az url: xxx.hu/kereses/tűz

Namármost ez xxx.hu/index.php?q=kereses/tűz valójában, csak htaccess segítségével használjuk a rövid url-t.

htaccess erre vonatkozó tartalma: RewriteRule ^([a-zA-Z0-9/_-]+)$ /index.php?q=$1 [L]

Ha ékezetes szóra keresünk az ugye bekerül az url-be, de ugye nem tölti be az oldalt, mert azok nincsenek a patternben.
Htaccesst hogyan lehet rávenni, hogy ékezetes karaktereket is kezeljen?
Gugliztam, de nem találtam semmi használhatót...

Eddig már próbáltam:
RewriteRule ^(*)$ /index.php?q=$1 [L]
RewriteRule ^(.*)$ /index.php?q=$1 [L]
De mindig 500-as Internal Server Error fogad...

Ha tudjátok a megoldást kérlek segítsetek.

Köszönöm
 
1

Nemrég

Pepita · 2012. Szep. 13. (Cs), 06.53
komplett RewriteRule-t írtam itt vkinek, de nem találom... A tiédben az a gond, hogy karaktereket ellenőrzöl, nem HTTP requqest-et. De URL-ben kezelned kell majd az átadott ékezeteket is, asszem urldecode fv.-nyel és gondod lehet a karakterkódolásokkal. Esetleg ajax-al?
2

Igen, az urldecode-on már túl

csabessz47 · 2012. Szep. 13. (Cs), 23.24
Igen, az urldecode-on már túl estem, mert a tesztelgetés mindig localhoston van, ahol nem használok htaccesst.

Azon gondolkodtam, hogy hogyan lehetne olyat, hogy bármilyen karaktersorozatot átadjon, ne "egyenként" írjam be a megengedetteket a mintába.

De azt meg csak a *-al kéne, de az meg nem akar menni.

Szerk: Meg akkor legalább működne mindenféle karakterrel, mert tuti lesz olyan barbár aki már csak szórakozásból is |-re keres :D

Szerk #2: ideiglenesen sikerült megoldanom:
RewriteRule ^kereses/(.*)$ /index.php?q=kereses/$1 [L]
RewriteRule ^([a-zA-Z0-9/_-]+)$ /index.php?q=$1 [L]

Érdekes, hogy ha a kereses előtte van, akkor működik *-al, és bármit írhatsz mögé...
Ezt nem értem.
3

Feltétel

Pepita · 2012. Szep. 14. (P), 01.58
Na, nekem sem árt egy kis ismétlés, előzőleg is RewriteCond-ot kellett volna emlegessek.
Pl.:
<IfModule mod_rewrite.c>

	RewriteEngine on

	RewriteCond $1 !^(index\.php|images|js|css|favicon\.ico|plusz_amit_akarsz_meg)

	RewriteRule ^(.*)$ index.php?$1 [L]

</IfModule>
Itt a feltétel azt mondja ki, hogy mindent, amiben nem szerepel az, hogy "index.php, images, ..." adjunk oda _GET paraméterként az index.php-nak. Ha kell neked "q=" vagy vmi a "?" után, akkor tedd oda.

Az a lényeg, hogy a zárójelben OR-ral felsorolt dolgok lehetnek könyvtárak is és fájlok is, ha ezek a szövegek szerepelnek a kérésben, akkor nem lesz átírva. Ettől még az adott könyvtárakon belül rendelkezhetsz másképp, ha az Apache végrehajtja /dir a .htaccess-eket.

Érdekes, hogy ha a kereses előtte van, akkor működik *-al, és bármit írhatsz mögé...
Azért van - szerintem - mert a fogadó progiban így kezeled. Pl. innét (kereses) tudod, hogy melyik model-t, controller-t kell meghívni, ha MVC. A "csak *-al" azért nem ment, mert rögtön nem volt rá routing szabály a progin belül, nem?
5

Köszönöm, délután

csabessz47 · 2012. Szep. 14. (P), 10.16
Köszönöm, délután kipróbálom.

Igen, viszont xxx.hu/kereses/ize működött, xxx.hu/kereses/izé nem. Vagy amikor szóközt átírta %20-ra, az sem.
Az index.php-m úgy működik, hogy az első paramétert megnézni - itt a kereses. Ha létezik controller_kereses.php akkor azt tölti be, ha nem akkor automatikusan egy olyat, ami ellenőrzi, hogy van-e ilyen kategória. Mert biony van xxx.hu/Gazdasag is pl.

Tehát most működik rendesen, de azért szeretném mindenképp azt, hogy bármivel működjön, ne kelljen neki a keresest megadni, mert többnyelvű lesz az oldal... És angolul nem kereses lesz az url-ben, hanem search.

De köszönöm a választ, mihelyst tudom kipróbálom.
6

Tökéletes!

csabessz47 · 2012. Szep. 14. (P), 22.42
Tökéletes!

Nagyon nagyon köszönöm
7

Örülök, hogy sikerült

Pepita · 2012. Szep. 15. (Szo), 02.07
Azt viszont nem egészen értem, hogy az URL-eknek miért kéne többnyelvűnek lenni. Komoly bonyodalmakat okozhatsz vele magadnak.
Vagy nyelvenként lesznek kontrollerek?!
8

Nem, a controller mindig

csabessz47 · 2012. Szep. 17. (H), 14.10
Nem, a controller mindig ugyanaz.

Beírod az url-t, ekkor feltételekkel kiválasztja a megfelelő utat legyen az url: (xxx.hu/a/b/c):
1. A c paraméter egy szám, és van annak mefelelő ID-jű tartalom
2. Az a paraméterre rákeres adatbázisban, és ha van annak megfelelő rovat akkor azt tölti be.
3. Ha van a és b egy szám akkor rovatnál lapoznak.
3. Egyiksem: 404.

És ez nagyon szépen is működik, a keresésen agyalok, mivel ott xxx.hu/kereses/keresett-szo/2 lesz ha lapoznak a találatoknál.
Nyilván itt a kereses (és az annak megfelelői pl szlovákul) úgy van tárolva, mint a rovatok (DB szerkezet lehetővé teszi a különbségtételt).

De arra is gondoltam, hogy xxx.hu/keresett-szo/2 legyen, és akkor ha nincs olyan kategória, akkor szimplán rákeres, akárki akármilyen badarságot pötyög oda.

Mivel itt többnyelvűségről van szó, így spec. kontrollerek nincsenek, csak egy controller_tartalom.php, amiben lezajlik a fenti összehasonlítás, és meghívja a megfelelő controllert, ami már nyelvtől függetlenül van megírva.

Pl a Gazdaság rovathoz 2 táblában van adat:
- közös - olyan név, amit az adminban használnak, általános infók
- nyelvfüggő - olyan név ami megjelenik, url, nyelv stb.

Dióhéjban ennyi.

De most melóban vagyok (ami nem programozás, így nem igazán tudok gondolkodni, remélem nem írtam hülyeséget :)
9

lapozás

Poetro · 2012. Szep. 17. (H), 15.56
A lapozást szerintem mindenképpen legyen inkább GET query paraméter, azt jobban támogatják a keresőmotorok, és tudják, hogy ez az adott tartalomnak egy valamiben módosult változata. Találtam ezzel kapcsolatban egy videót.
4

Köszönöm, délután

csabessz47 · 2012. Szep. 14. (P), 10.15
Szerk: rossz helyre ment.