. Htaccess átirányítást hogy oldhatnám meg?
Eddig ennyi van megalkotva az átirányítós részből:
RewriteRule ^([^/]*)/([^/]*)/?$ /index.php?page=$1&id=$2 [L]
Amire működik is:
domain.com/hirek/
domain.com/hirek/1
domain.com/hirek/1/
Amire nem, de szeretném:
domain.com/hirek
(Tehát ne kelljen feltétlenül odatenni a / jelet akkor sem, ha csak a page van beállítva.) Pl. blog.hu-s blogoknál mindegy, hogy odaírjuk-e. Nekem viszont ilyenkor kiírja, hogy az oldal nem létezik. Esetleg a php-ban kéne valamit ügysekedni? Ha valakinek lenne ötlete, megköszönném a segítséget!
Ezt vagy ehhez hasonlót írj a .htaccess fájlba:
ErrorDocument 404 /
A pédában a 404 értelem szerűen a "not found" hiba kódja,
a / pedig az a cím ahová a böngészőt átirányítjuk ha a hiba bekövetkezne... (képekre, scriptekre esetén is)
Így minden tartalom esetén amit nem talál a szerver a kezdőlapra vagy az általad megadott oldalra irányítja a látogatót (saját hibaoldalra vagy a /hírek/-re is).
Blogoknál, cms rendszereknél általában csak egy rewrite van, amit onnan el is leshetsz. Aztán a kapott url-t már a php-d dolgozza fel. Ez lehet az egyik megoldás.
A másik megoldás, hogy tesztel a kérésednek megfelelő url-ekre is egy szabályt, pl:
RewriteRule ^([^/]*)$ /index.php?page=$1&id=naaznincs
Az előtte szólóhoz pedig: tudtommal nem szabad átirányításra használni a hiba oldalakat. Akkor működhet, ha a header-ben aztán ki is adod a megfelelő hibát. Márpedig egy weboldal kezdő oldala ne dobjon 404-es kódot.
Dzs-z-nek (is):
Az ErrorDocument valójában nem a böngészőt irányítja át hanem a szerver által, az adott hiba esetén adandó választ határozza meg, ami lehet egy url vagy akár egy szöveges üzenet is.
Ha egy url-t adsz meg akkor annak az oldalnak nem kell feltétlenül hibakódot generálnia. Képzeld csak el hogy ha valaki elgépeli az url-t és az oldalad ekkor "404 not found" hiba állapotot és hibaoldalt dob a kliensnek vagy helyette "200 OK" állapottal és "Ön valószínűleg elgépelte a címet..." üzenettel hasonló címeket javasol a szervereden. Esetleg hiba nélkül egy kezdőlapra/kategória oldalra dob. A következő példák egyike hibás url, tehát "404 not found"-ot és hibaoldalt kellene kapnod, de helyette "200 OK"-t és kategóriaoldalt kapsz:
http://www.gyakorikerdesek.hu/szorakozas__zene__389386-mi-en..
www.gyakorikerdesek.hu/szorakozas__zene__1389386-mi-ennek-a-szamnak-a-cime-eloadoja
Hoppá elgépelés... és újra a 2 cím:
http://www.gyakorikerdesek.hu/szorakozas__zene__389386-mi-en..
http://www.gyakorikerdesek.hu/szorakozas__zene__1389386-mi-e..
Adminok: Miért nem lehet itt szerkeszteni a bejegyzésemet?
Én egy ilyen szabály szoktam alkalmazni:
RewriteRule ^(.*)$ /index.php?page=$1 [QSA]
Ezzel a $_GET["page"] változóba kerül az összes hívás.
az explode("/",$_GET["page"]) létrehozza az összes alhívást, azt a php-val vizsgálva már kiszedheted a megfelelő adatokat.
pl domain.com/hirek/2013/januar/18 esetén:
$sub = explode("/",$_GET["page"]);
$sub[0] = "hirek"
$sub[1] = "2013"
$sub[2] = "januar"
$sub[3] = "18"
Szerintem ez így használhatóbb, mint előre meghatározni, hogy hány szintre számítasz. Ilyenkor nyilván ha a végén "/" jel van, akkor lesz egy üres érték a tömb végén, de erre egy vizsgálatot írni már nem nagy kaland:
if (isset($sub[1]) && $sub[1]!="") {...}
Sok sikert!
Köszönöm a segítséget! Az errordocumentes átiárnyítást nem szeretném, mert már állítottam be egyéni hibaoldalakat. (000webhoston a 404-es hiba még a "saját" weboldalamról is elvisz az ő domainjére...)
Drone007 ötletét hasznosítottam sikerrel, egy kis módosítással:
RewriteRule ^([^.]*)$ /index.php?page=$1 [L]
azaz bármit be lehet írni, kivéve olyat, amiben pont szerepel. Szenvedtem egy pár percet mire rájöttem, addig mindenre 500 internal server errort adott...
Csak arra vigyázz, ha nem használod a [QSA] stringet (query string append), akkor a get request adatok közül csak az elsőt kapja meg a php fájl.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!