No route for HTTP request

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
peci1
Člen | 60
+
0
-

Ahoj, jen chci reportnout neco, s cim jsem se nejakou dobu pral a nakonec vyresil ;)

Zalozil jsem si uplne cerstvou aplikaci s routama ze Skeletonu a pokud jsem dal z browseru request na homepage (tj. prazdna relativni cesta), bylo vse ok. Jakmile jsem ale chtel libovolnou jinou action nebo presenter, Ladenka hlasila „No route for HTTP request“.

Po nekolika minutach zoufalosti jsem prisel na chybu – slozka s webem mela v nazvu velka pismena a ja je v browseru psal mala. Po oprave jejich velikosti vse slape jako hodinky.

PS: nevim, zda je to chovani bug nebo ne, to asi necham posoudit erudovanejsi Nettisty…

Mikulas Dite
Člen | 756
+
0
-

Zatím jsou v Nette většinou názvy case-sensitive, ale až David bude předělávat ConventionalRenderer https://forum.nette.org/…0-radku-kodu, tak se to možná změní, viz. link.

psimekjr
Člen | 20
+
0
-

Mám stejný problém, změna velikosti písmen však nepomohla.. vycházím z tutoriálu statický web v nette..

<?php

//router pro mod rewrite
$router[] = new Route('index.php', array(
    'presenter' => 'HomePage',
    'action' => 'default',
), Route::ONE_WAY);

$router[] = new Route('<presenter>/<action>/<id>', array(
    'presenter' => 'HomePage',
    'action' => 'default',
    'id' => NULL,
));

?>

localhost/xxx/document_root/ me hodi na uvodni stranku

localhost/xxx/document_root/nazev_presenteru me hodi 404

22
Člen | 1478
+
0
-

mas poveoleny mod rewrite na serveru?? jinak musis pouzit SimpleRouter, ktery je zakomentovany v prikladu bootstrapu.

psimekjr
Člen | 20
+
0
-

v loaded modules je vyjmenovaný mod_rewrite – pokud to ovšem stačí

screen

Ondřej Mirtes
Člen | 1536
+
0
-

A máš v document rootu správný .htaccess?

Tvůj problém je trochu jiný, autorovi tématu šlo o to, že se mu vyhodila Laděnka s hláškou, ty dostáváš 404ku (nejspíš od Apache) a Nette se ke slovu vůbec nedostane.

psimekjr
Člen | 20
+
0
-

Omlouvám se, špatně jsem to popsal. Vyhodí mi to Laděnku s hláškou BadRequestException #404 – No route for HTTP request.

(.htaccess se tváří být správný – RewriteEngine On atd..)

Ondřej Mirtes
Člen | 1536
+
0
-

Aha, promiň, tak v tom v případě tvůj presenter se pravděpodobně jmenuje HomepagePresenter, přitom v routách máš HomePage (velké P).

psimekjr
Člen | 20
+
0
-

Ano, díky, to je určitě chyba. Ale po opravě problém přetrvává.

basepresenter

<?php

abstract class BasePresenter extends Presenter
{
    public $oldLayoutMode = FALSE;

    public function beforeRender()
    {
        $this->template->menuItems = array(
            'Homepage:' => 'Home',
            'Delicious:' => 'Delicious'
        );
    }
}

?>

bootstrap

<?php

// Step 4: Setup application router
$router = $application->getRouter();

$router[] = new Route('index.php', array(
	'presenter' => 'Homepage',
	'action' => 'default',
), Route::ONE_WAY);

$router[] = new Route('<presenter>', array(
	'presenter' => 'Homepage',
	'action' => 'default'
));

?>

html

<li class=„current“><a href=„/xxx/document_root/“>Home</a></li>

<li ><a href=„/xxx/document_root/delicious“>Delicious</a></li>

no route for http request mi pak vyhodí

/xxx/document_root/delicious

/xxx/document_root/homepage

projde

/xxx/document_root/

Ondřej Mirtes
Člen | 1536
+
0
-

A co když místo té druhé routy dáš tuto?

$router[] = new Route('<presenter>/<action>', array(
        'presenter' => 'Homepage',
        'action' => 'default',
));
psimekjr
Člen | 20
+
0
-

Stejné. Zkoušel jsem i promazávat cache/temp.

Etch
Člen | 403
+
0
-

A co třeba RewriteBase??

psimekjr
Člen | 20
+
0
-

.htaccess se zdá být v pořádku, je ze skeletonu

psimekjr
Člen | 20
+
0
-

Možná je problém přece jen v .htaccess

# disable directory listing
Options -Indexes

# configure PHP
# <IfModule mod_php5.c>
#    php_flag magic_quotes_gpc off
#    php_flag register_globals off
#    php_flag zend.ze1_compatibility_mode off
# </IfModule>

# mod_rewrite
<IfModule mod_rewrite.c>
	RewriteEngine On
	# RewriteBase /

	# front controller
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
</IfModule>
Etch
Člen | 403
+
0
-

Zkus odkomentovat RewriteBase z dát tam

RewriteBase /xxx/document_root
nebo
RewiteBase /
psimekjr
Člen | 20
+
0
-

Zkusil jsem obojí a stejně to stále hlásí No route for HTTP request.

psimekjr
Člen | 20
+
0
-

Tak nakonec to už šlape. Bylo to opravdu v RewriteBase. Díky všem za pomoc!