Apr 16 2008

Apache 2: %2F a %5C v URL – „404 Not Found“

Tag: Apache,SEOJens @ 09:05

Výchozí nastavení direktivy AllowEncodedSlashes je v Apache 2 nastaveno dle oficiální dokumentace na Off. To způsobí, že v případě že se v URL objeví %2F, tedy „enkódovaný“ znak / (případně %5C pro ) Apache hodí výchozí chybovou hlášku 404 Not Found přičemž tato chyba nezohlední ani vlastní stránky 404 a vždy se zobrazuje výchozí hláška Apache.

AllowEncodedSlashes On

Řešením je tedy zařazením direktivy AllowEncodedSlashes do globální konfigurace serveru nebo konfigurace virtuálního severu.

<VirtualHost *:80>
    AllowEncodedSlashes On
</VirtualHost>

Chyba se může projevit například při použití Zend_View_Url_Helper při sestavovaní URL adresy na základě dat z formuláře:

$this->view->url(array('controller' => 'firmy', 'action' => 'hledat'),
  null, array('mesto' => $this->getRequest()->getParam('mesto')));

vygeneruje adresu, v případě zadání do položky formuláře „Praha/Brno“ vypadající přibližně takto:

/firmy/hledat/mesto/Praha%2fBrno

Tento problém se neprojeví, pokud se při vyhledávání používá QUERY_STRING, tedy v URL jako je tato:

http://framework.zend.com/search?query=Praha%2FBrno