Diskuze: Pekné url hádžu 404 / Router nič nerobí
Člen
Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Tak první věc, kterou vidím je
if (!$post) {
, protože pokud tak koukám, tak proměnná $post je vždy null, jelikož není nikde deklarovaná, tudíž ta podmínka vždycky vyhodí 404. Jedinou záhadou tedy zůstává, jak to, že to ze SimpleRouter funguje.
Hop, to sa mi tam pred chvílou priludilo, problem to ale neriesi.
Cache cistim.
Prečo odkazuješ na HomepagePresenter presenter ked router chces nastaviť u NewsPresenter ?
To udává adresu, kam se přesměruje výchozí stránka tj. v tomto konkrétním případě /localhost/example/. V tom problém určitě není.
Nejdřív začnu trochu obecně. Asi nejlepší způsob, jak debuggovat routování URL v Nette je začít u laděnky (Tracy) pro konkrétní adresu. Ta totiž přesně udává, jak se ona konkrétní adresa aktuálně routuje, což člověku samo o sobě dost napoví.
A teď ke konkrétní situaci. Já osobně se domnívám, že tady je problém přímo v té URL, protože SimpleRouter, bere tu adresu trochu jinak (obecněji), zato RouteList je o dost striktnější. Nejlepší bude vysvětlení na konkrétním případu:
Jestli je to opravdu tento problém otestuješ jednoduše tak, že tu routu upravíš na
example/<presenter>/<action>[/<id>]
a ono to začne fungovat. Potom samozřejmě na serveru nic jako "example" nebude, takže se to musí ještě trochu odladit, ale pro otestování a pochopení problému tohle stačí.
Doufám, že jsem to vyjádřil dost srozumitelně, když tak sem pak napiš, jak to dopadlo a případné dotazy.
Tracy k dispozicii na tej chybnej stranke nemam, 404 je priamo od Apache.
Tak ale pravděpodobně není chyba ve směrování Nette, ale ve směrování Apache (pořád nevysvětluje funkčnost SimpleRouter ) nebo máš špatně nastavené odchytávání chyb v Nette. Každopádně, když není k dispozici laděnka a je to chyba od Apache, je potřeba jít ručně po stopách toho směrování. Normálně bych Tě nechal hodit sem výpis směrování toho požadavku (např. pomocí tracepath), ale tady si troufnu to odhadnout a dám sem seznam věcí, které by to chtělo zkontrolovat:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ www/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^www/
RewriteRule ^(.*)$ www/$1
</IfModule>
Je tohle všechno v pořádku?
v zlozke example nemam ziadny .htaccess, nette to napriek tomu do www
smerovat zvlada.
Vo www je tento:
# Apache configuration file (see httpd.apache.org/docs/current/mod/quickreference.html)
# disable directory listing
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>
# enable cool URL
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /var/www/html/example/www/
# prevents files starting with dot to be viewed by browser
RewriteRule /\.|^\. - [F]
# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]
</IfModule>
# enable gzip compression
<IfModule mod_deflate.c>
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json application/xml image/svg+xml
</IfModule>
</IfModule>
Jak Nette to směrovat zvládá? Vždyť dostáváš 404 od Apache, takže zvládá možná něco, ale rozhodně je tam něco špatně.
Zobrazeno 12 zpráv z 12.