HTTPS Route – 404 Not Found

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

Ahojte,
hľadal som, dokonca som aj našiel, len mi to nepomohlo (https://forum.nette.org/…resmerovavat).

Potrebujem vo svojej aplikácii použiť HTTPS routy, v bootstrap.php som v routeri nastavil príznak Route::SECURED a teda keď idem na adresu, ktorú mám v routeri, presmeruje ma na HTTPS na čo Apache vyhodí 404 Not Found. Keď mám tú istú adresu s tými istými parametrami ako HTTP (bez príznaku Route::SECURED), tak to funguje. Neviete niekto poradiť, kde by mohol byť problém?

bootstrap.php

$container->router[] = new Route('index.php', 'Front:Default:default', Route::ONE_WAY);

$container->router[] = $serviceRouter = new RouteList('Service');
$serviceRouter[] = new Route('service/<action>[/<id>]', 'Default:default', Route::SECURED);

//ostatne definicie rout

//FrontModule, AdminModule ...
enumag
Člen | 2118
+
0
-

Máš tam mod_ssl? Osobně používám tohle, to mi vypne HTTPS na localhostu, kde mod_ssl nemám.

$secured = (function_exists('apache_get_modules') && in_array('mod_ssl', apache_get_modules())) ? Route::SECURED : 0;
$serviceRouter[] = new Route('service/<action>[/<id>]', 'Default:default', $secured);

Editoval enumag (9. 1. 2013 15:02)

pseudonym
Člen | 57
+
0
-

Vyzerá, že by to mohlo zabrať. Keď som si dal vypísať $secured, vypísalo 0. Je to na serveri, na localhoste ani neskúšam. Idem napísať providerovi, či mi to vie povoliť. Zatiaľ ďakujem

enumag
Člen | 2118
+
0
-

Ještě záleží zda na serveru je opravdu apache. Pokud ne tak ta detekce musí být jinak (netuším jak protože všechny mé weby běží bohužel na apachi).

pseudonym
Člen | 57
+
0
-

Z tohto usudzujem, že je tam na 100% Apache ;-)

Not Found
The requested URL /service/get-something was not found on this server.
Apache Server at test.server.sk Port 443
pseudonym
Člen | 57
+
0
-

Super, už to funguje, stačilo aktivovať mod_ssl, ďakujem za pomoc.

Ešte by ma zaujímalo, či je nejako možné konkrétny modul obmedziť iba na HTTPS komunikáciu. Totižto keď teraz zadám http alebo https, tak obe mi to zoberie a funguje to. V bootstrape mám presne to isté, čo som písal v prvom príspevku:

$container->router[] = new Route('index.php', 'Front:Default:default', Route::ONE_WAY);

$container->router[] = $serviceRouter = new RouteList('Service');
$serviceRouter[] = new Route('service/<action>[/<id>]', 'Default:default', Route::SECURED);

//ostatne definicie rout

//FrontModule, AdminModule ...
enumag
Člen | 2118
+
0
-

Asi nechápu dotaz… když chceš aby jeden modul běžel přes https tak prostě všem jeho routám dáš ten flag, ne?

pseudonym
Člen | 57
+
0
-

Áno, presne to som spravil, ale funguje aj keď zadám http aj keď zadám https, resp. inak. Po zadaní HTTP to automaticky nepresmeruje na HTTPS. Nemalo by sa to chovať tak, že to automaticky presmeruje?

enumag
Člen | 2118
+
0
-

Mělo… a u mne to tak funguje.

pseudonym
Člen | 57
+
0
-

Na úrovni presenteru to tak funguje, ale akonáhle zadám action, tak ma automaticky nepresmeruje – je potrebné zadávať pre každú akciu vlastnú route?

Možno sa ten server z toho potrebuje len spamätať. Každopádne, ak sa mi s tým niečo podarí spraviť, budem to tu aktualizovať (pre prípad, že by mal niekto v budúcnosti podobný problém).

enumag
Člen | 2118
+
0
-

Ne, samostatné routy pro každou action jsou naopak velmi kontraproduktivní z hlediska rychlosti. EDIT: Totéž pro samostatné routy pro každý presenter.

Editoval enumag (10. 1. 2013 15:53)

Milo
Nette Core | 1283
+
0
-

Podívej se v RoutingPanelu, jaká routa se vybrala. Jestli je SECURED.

pseudonym
Člen | 57
+
0
-

Čiže, v prípade keď zadám do adresy len http://domena.sk/module/, kde mám pri tomto module v boostrap.php príznak secured, presmeruje ma priamo na https. Ak zadám http://domena.sk/module/action/, tak ma automaticky na https nepresmeruje. Funguje to keď zadám https://domena.sk/module/action/, ale z http na https ma automaticky nesmeruje. V paneli s routami som si všimol, že pri oboch prípadoch mi vypíše možnosť „may“, že sa to môže pravdepodobne mýliť s inou routou:

may	Route	<action>[/<id>]	 presenter = Default
action = default
id = NULL
Front	 Front:Default:module
id = action

samozrejme v tomto prípade je „module“ môj modul a „action“ je akcia z adresy http://domena.sk/module/action/

Milo
Nette Core | 1283
+
0
-

Nejlepší by bylo, kdyby's sem pastnul komplet routy jak je máš nadefinované.

pseudonym
Člen | 57
+
0
-

Routy, ktoré mám v bootstrap.php

$container->router[] = new Route('index.php', 'Front:Default:default', Route::ONE_WAY);

$container->router[] = $serviceRouter = new RouteList('Service');
$serviceRouter[] = new Route('service/<action>', 'Default:default', Route::SECURED);

$container->router[] = $adminRouter = new RouteList('Admin');
$adminRouter[] = new Route('admin', 'Default:');
$adminRouter[] = new Route('zakaznicka-zona/<presenter>/<action>', 'Default:');

$container->router[] = $frontRouter = new RouteList('Front');

$frontRouter[] = new Route('kampus/[poschodie/<id>]', 'Reality:kampus');
$frontRouter[] = new Route('kampus/byt[/<id>]', 'Reality:detail');
$frontRouter[] = new Route('kampus/<action>[/<id>]', 'Reality:default');
$frontRouter[] = new Route('galeria/<action>[/<id>]', 'Gallery:default');
$frontRouter[] = new Route('<action>[/<id>]', 'Default:default');
enumag
Člen | 2118
+
0
-

Která routa matchuje ten požadavek co se automaticky nepřesměruje na HTTPS?

pseudonym
Člen | 57
+
0
-

Tá, ktorá je v tomto príspevku: https://forum.nette.org/…04-not-found#…

$frontRouter[] = new Route('<action>[/<id>]', 'Default:default'); – pri tejto je napísané MAY
$serviceRouter[] = new Route('service/<action>', 'Default:default', Route::SECURED); – pri tejto YES

Milo
Nette Core | 1283
+
0
-

Zvláštní, mě přesměruje vždy.

U jakých URL očekáváš, že přesměruje?