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.

Pracoval pro vás: Charles Robertson | Chcete nás kontaktovat?