Route: Cesta v url
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Jan Tvrdík
- Nette guru | 2595
Mám následující routu:
$router[] = new Route('//archiv.example.com/<path .*?>', array(
'module' => 'Archiv',
'presenter' => 'Archiv',
'action' => 'default',
'path' => NULL,
));
Problém je, že pokud path
obsahuje v sobě lomítko, tak ho
Nette přesměruje na neexistující adresu:
GET /slozka1/slozka2 HTTP/1.1
Host: archiv.example.com
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=8108cl002n0jn5q6b78a3has92
HTTP/1.x 302 Found
Date: Sun, 16 Nov 2008 09:27:47 GMT
Server: Apache/2.2.6 (Win32) PHP/5.3.0alpha3-dev DAV/2 SVN/1.4.6
X-Powered-By: Nette Framework
Location: http://archiv.example.com/slozka1%2Fslozka2
Connection: close
Content-Length: 112
Content-Type: text/html
----------------------------------------------------------
GET /slozka1%2Fslozka2 HTTP/1.1
Host: archiv.example.com
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=8108cl002n0jn5q6b78a3has92
HTTP/1.x 404 Not Found
Date: Sun, 16 Nov 2008 09:27:47 GMT
Server: Apache/2.2.6 (Win32) PHP/5.3.0alpha3-dev DAV/2 SVN/1.4.6
Content-Length: 213
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
Editoval Jan Tvrdík (16. 11. 2008 10:35)
- Jan Tvrdík
- Nette guru | 2595
Tak už jsem našel řešení:
Problém byl způsoben výchozím stylem v Routě, takže řešení je napsat si vlastní styl:
Route::$styles['path'] = array(
Route::PATTERN => '.*?',
);
$router[] = new Route('//archiv.example.com/<path>', array(
'module' => 'Archiv',
'presenter' => 'Archiv',
'action' => 'default',
'path' => NULL,
));
Editoval Jan Tvrdík (16. 11. 2008 13:38)
- David Grudl
- Nette Core | 8218
Ano, ten problém je v tom, že výchozí styl má nastaveno
self::FILTER_OUT => 'rawurlencode'
.