Nedávno jsem si všiml, že některé weby odkazují na URL nesprávně zakódované v procentech, na které můj server (LAMP) odpovídá 404 Nenalezeno.
Například pro moji URL, jako je tato:
http://www.site.com/page.php?param=value
Odkazují na to takto:
http://www.site.com/page.php%3Fparam%3Dvalue
Tak:
- Kdo se mýlí Můj server nerozumí? nebo odkazující stránka pro nesprávné zadání adresy URL?
- Mohlo by se něco udělat pro konfiguraci Apache, aby porozuměl nesprávně kódovanému oddělovači řetězce dotazu (
%3F
namísto?
)? - Pokud ne, bylo by bezpečné nastavit přesměrování překladem souboru
%3F
na?
?
- 1 Tato odpověď stackoverflow.com/questions/3229371/… pokrývá vaši první a třetí otázku. Nejsem si jistý tím druhým.
- Dík! Pokrývá většinou třetí - musel bych to přizpůsobit něčím obecnějším, ale v pořádku. Přesto bych chtěl vědět, jestli je odkazující stránka omylem, nebo já?
- 3 @Itai Je to odkazující stránka, protože adresy URL nebyly na prvním místě vygenerovány správně.
Nejdříve nejdříve, jak řekl @LazyOne, adresy URL třetích stran nejsou správně generovány, takže se očekává selhání serveru - protože právě teď selhává, jak jste popsali.
Upozorňujeme, že platné HTML a platné adresy URL jsou jiná věc. Entitám pro obsah HTML byste měli uniknout, ale to není pravda při psaní odkazů, adres obrázků a volání externích souborů.
Než se rozhodnete uniknout nebo ne, zeptejte se sami sebe: čte to uživatel nebo prohlížeč? Odpověď vám řekne, jaký typ kódování byste měli použít.
- 1 Tento poslední odstavec je nesprávný. Které kódování používáte, je založeno na tom, zda kódujete dokument XML / HTML nebo URI / URL. V některých případech děláte jeden v druhém. Například ampersandy mají v dokumentech HTML a XML zvláštní význam: používají se pro odkazy na znaky (např. Číselné odkazy na znaky, jako například
&
a&
nebo odkazy na znakové entity, jako je&
). Kromě těla dokumentu se ale ampersandy mohou zobrazovat také v metadatech a adresách URL odkazů. V druhém případě budete muset použít obě kódování, např./foo?bar=1&baz=hello%20world
. - 1 Problém s URL v otázce je, že kódování URL je prováděno nesprávně. Důvod
?
a&
v URL musí být procentně zakódováno, protože mají při definování řetězce dotazu zvláštní význam. Takže další použití těchto znaků musí být procentně zakódována. Ale v tomto případě je otazník předpokládal k označení začátku řetězce dotazu, takže by neměl být kódován procentem.