Zadejte hledaný výraz...

Jak na Apache zařídit správně 404 Not found?

petrx
verified
rating uzivatele
(8 hodnocení)
15. 5. 2016 21:09:19
Narazil jsem na takový problém:
Web běží na Apache/2.2.16 + PHP 5.3.3-7.
Občas někdo zabrousí na stránku, která neexistuje.
Potřebuji, aby na neexistujícím URL (řekněme
http://www.example.xyz/neexistuje.html ) server vrátil stavový kód 404 Not found a přímo na daném URL zobrazil stránku ve stylu daného webu (logo, navigační menu) s hláškou "Stránka nenalezena" a pár odkazy, kudy dál.
Na zmíněném webu však zatím neexistující stránky fungují tak, že se URL typu
http://www.example.xyz/neexistuje.html přesměruje se stavovým kódem 301 na speciální stránku
http://www.example.xyz/404.html , která teprve vrátí kód 404.
Reklamoval jsem to u webmastera. Opáčil:
ErrorDocument 404 /404.php
To je vlastnost apache. Neumim preprogramovat webovy server :(
Co s tím? Nikdy jsem se neživil administrací Apache, ale snad je možné i na Apachi dosáhnout stavového kódu 404 přímo na neexistujícím URL a zobrazení customizované chybové stránky přímo na daném URL.
15. 5. 2016 21:09:19
https://webtrh.cz/diskuse/jak-na-apache-zaridit-spravne-404-not-found/#reply1196011
Petr Pojer
verified
rating uzivatele
(9 hodnocení)
15. 5. 2016 21:19:14
Pokud to chceš pro každý web zvlášť, tak to není vlastnost Apache, ale souboru .htaccess. To by webmaster vědět měl :)
Zadej si do Googlu "htaccess 404 page", vyjedou ti návody jak na to.
15. 5. 2016 21:19:14
https://webtrh.cz/diskuse/jak-na-apache-zaridit-spravne-404-not-found/#reply1196010
Jan Stejskal
verified
rating uzivatele
(7 hodnocení)
15. 5. 2016 23:20:25
Nevim z jakeho duvodu pozadujete takto nesmyslnou upravu, ale pokud to musi byt.... Z konfigurace apache odstrante errordocument a k zobrazeni vlastni stranky 404 pouzijte pravidlo v htaccess.
15. 5. 2016 23:20:25
https://webtrh.cz/diskuse/jak-na-apache-zaridit-spravne-404-not-found/#reply1196009
TomasX
verified
rating uzivatele
(4 hodnocení)
16. 5. 2016 03:38:15
s co obsahuje soubor 404.php? Jestli nejsem úplně slepej, apache místo vrácení své 404, zavolá 404.php a vrátí jeho výsledek. V tom php musíš mít hned na začátku něco takovéhoto:
header("HTTP/1.1 404 Not Found");
Jinak ti php vrátí stavový kód 200 a to je právě asi tvůj problém.
---------- Příspěvek doplněn 16.05.2016 v 03:55 ----------
aha, chápu, ono ti to takhle funguje, ale apache ti vrací 301 místo 404. Můžeš sem hodit svůj htaccess? Apache přesměrovává u ErrorDocumentu jen pouze když se mění doména, tj. přesměrováváš na jinou doménu. Je možné, že s 404 zároveň děláš i rewrite a dohazuješ www či https?
Jinak ten "ErrorDocument 404 /404.php" by měl správně chytnout interní url a tu zobrazit, nikoliv přesměrovat. ErrorDocument se ale v apche zpracovává dřívde než rewrite a pokud máš svoje pravidla, přepíšeš url a apache ti to přesměruje. To jen ale tak střílím, můžeš doplnit nějaké podrobnosti či adresu webu?
16. 5. 2016 03:38:15
https://webtrh.cz/diskuse/jak-na-apache-zaridit-spravne-404-not-found/#reply1196008
McFly
verified
rating uzivatele
(4 hodnocení)
16. 5. 2016 10:28:06
Standardně - pokud vím - při neexistující stránce vrací server status 404 - Not found. Pokud vrací 301 - Moved permanently (což je imho ŠPATNĚ, a když už, tak měl použít status 302), musí být nastavení webu nějak modifikováno webmasterem, případně si to modifikuješ ty sám v nějakém .htaccess souboru. Chtělo by to víc informací.
Doplním test z praxe:
Zobrazila se krásně stránka error.php se statusem 404 bez přesměrování, takže v adresním řádku vidím stále http://server/admin/mrtg/neexistuje.html
16. 5. 2016 10:28:06
https://webtrh.cz/diskuse/jak-na-apache-zaridit-spravne-404-not-found/#reply1196007
Jan Stejskal
verified
rating uzivatele
(7 hodnocení)
16. 5. 2016 11:50:24
Napsal McFly;1292115
Doplním test z praxe:
Zobrazila se krásně stránka error.php se statusem 404 bez přesměrování, takže v adresním řádku vidím stále http://server/admin/mrtg/neexistuje.html
Praxe téměř vždy obsahuje také htaccess pravidla a ta jsou v tomto případě rozhodující. Téměř vždy je totiž uživateli zobrazena stránka, která na serveru neexistuje (ani jako soubor ani jako adresář). Proto nejprve dle pravidel přesměrování nebo podstrčení dojde k přesměrování na požadovanou stránku dle url a až skript vyhodnotí, zda taková stránka existuje nebo ne, podle toho se stránka buď zobrazí nebo se přesměruje na stránku vracející 404. V logu na serveru pak bude 301 a následovat bude ihned 404.
Samozřejmě jsou případy, kdy k této posloupnosti nedojde, ale v praxi se takové situace příliš nevyskytují. Jde o situace, kdy server posílá na výstup přímo soubor, tedy statické stránky. Případně url není "pěkná" a tedy není nutné přesměrovávat. Nebo se jedná o adresář. Atd.
16. 5. 2016 11:50:24
https://webtrh.cz/diskuse/jak-na-apache-zaridit-spravne-404-not-found/#reply1196006
Pro odpověď se přihlašte.
Přihlásit