Routování s HTTPS, nelze přesměrovávat

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

Zdravím,
jsem v Nette začátečník a narazil jsem na problém s jednoduchou aplikací, který zatím nedokážu vyřešit. Mám jednoduchou hlavní webovou stránku, které je dostupná přes HTTPS, pod …/document_root/ a z ní odkaz, který by měl uživatele přesměrovat na: /document_root/login/, vypadá takto:

<a href="./login">Přihlášení</a>

Po kliknutí na odkaz jsem sice přesměrován na …/document_root/login/ ale Apache mi vrátí pouze „404 NOT Found“ s textem: „The requested URL /index.php was not found on this server.“
V httpd.conf je nastaveno AllowOverride All a i rewride_mode je dostupný.

Používám NetteFramework-2.0alpha-PHP5.2, verze PHP je 5.2.11.
V bootstrapu mám routování zavedeno takto:

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

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

$router[] = new NRoute('<presenter>/<action>/<id>', array(
	'presenter' => 'Homepage',
	'action' => 'default',
	'id' => NULL,
), NRoute::SECURED);

Presenter i Template ke stránce Login (tedy LoginPresenter) jsou na místě.

Stejnou stránku jsem rozjel v Nette pro PHP 5.3 na localhostu, problém nastal až při přenesení na server, kde je nižší verze PHP 5.2.11 a ke stránce je nutno přistupovat přes HTTPS.
Dokázal by mi někdo poradit, jak s tím pohnout ?
Předem díky.

pekelnik
Člen | 462
+
0
-

Pokud nemáš vytvořen VirtualHost potřebuješ nastavit RewriteBase v .htaccessu na

RewriteBase /document_root/

co se týče tvorby linků nebylo by od věci mrknout do dokumentace něbo kamkoliv jinam:

<a href="{link login}">Přihlásit</a>
Podbor
Člen | 19
+
0
-

Díky za pomoc.
Bohužel jsem se moc neposunul. RewriteBase v .htaccess nastavím a jediná změna je pak u hlášky 404 její text. Tentokrát nemůže najít „The requested URL /document_root/index.php was not found on this server.“
Změna formátu odkazu nepomohla, odkazuje mne to na „…/document_root/homepage/registration/“ a opět chybu 404. :-(
Původně jsem totiž měl tu aplikaci v Nette pro PHP 5.3, která mi jela jak na localhostu, tak na jednom serveru, při pokusu o implementaci na server jiný, kde je PHP 5.2 jsem musel přistoupit k použití Nette pro danou verzi PHP a už se mi stránku rozjet nepodařilo. Bohužel nemám přístup ke konfiguraci tamního Apache a tak nevím, v čem je potíž… Jestli v nastavení serveru, nebo v mém kódu.

Aurielle
Člen | 1281
+
0
-

pekelnik: pokud tvoří routy mimo aplikaci tak asi makra použít nemůže ;)

Aurielle
Člen | 1281
+
0
-

Neměla by mít routa pro index.php náhodou i příznak SECURED? (NRoute::ONE_WAY | NRoute::SECURED)

Podbor
Člen | 19
+
0
-

I s přidáním příznaku NRoute::SECURED k index.php jsem se bohužel nedočkal žádné změny… V podstatě i když celou tuto Routu promažu, tak se nic nezmění.
Mohlo by to být způsobeno přímo nastavením Appache ? AllowOverride ale zapnuto je, mod_rewrite je tam taky…
Děkuju ale za snahu.

pekelnik
Člen | 462
+
0
-

@gmvasek ONE_WAY routa pro index.php nemá imho s problémem nic společného… btw. kde jsi vyčetl, že nepoužívá aplikaci.

@podbor Pokud se ti zobrazí apache (non-Nette) chybová stránka – Nette to vůbec nezpracuje – tedy bude chyba v nastavení webserveru.

Editoval pekelnik (25. 10. 2010 19:32)

Podbor
Člen | 19
+
0
-

@pekelnik Díky za tip, to by znamenalo, že je server asi nastaven tak, že když zadám odkaz, který chci listovat tedy končící/ tak mi to tam automaticky hledá soubor index.php, resp. index.html…
Jak nastavit routy tak, aby mi tedy přesměrovával ne na /document_root/login/ ale na /document_root/login/index.php? To by mohlo pomoct…

Pepča
Člen | 12
+
0
-

Podbor napsal(a):

@pekelnik Díky za tip, to by znamenalo, že je server asi nastaven tak, že když zadám odkaz, který chci listovat tedy končící/ tak mi to tam automaticky hledá soubor index.php, resp. index.html…
Jak nastavit routy tak, aby mi tedy přesměrovával ne na /document_root/login/ ale na /document_root/login/index.php? To by mohlo pomoct…

<?php
$router[] = new NRoute('login/index.php', array(
        'presenter' => 'Homepage',
        'action' => 'login',
), NRoute::ONE_WAY);
?>

Editoval Pepča (26. 10. 2010 9:52)

Podbor
Člen | 19
+
0
-

Díky za rady, ale stále jsem bohužel nepochodil.
Na serveru, kde se snažím Nette rozjet, je nově PHP verze 5.3.3. Použil jsem příslušný Nette Framework, který jsem již měl na localhostu i jiném serveru otestovaný, ale stále můj problém přetrvává: Appache vyhazuje při pokusu o přejití na jinou než hlavní stránku …/document_root/ chybu „404 Not Found“.
Základní kostra https://.../…cument_root/ jede v pořádku, jakmile se pokusím přes odkaz:

	<a href = "./login/">Přihlášení</a>

přejít na stránku https://.../…_root/login/ ohlásí se mi ta chyba „404“.
Routy mám nastavené tak, jak jsou ve skeletonu pouze s tím, že je u nich přidán příznak „Route::SECURED“. Vůbec netuším, jak se pohnout dál. Dokázal by mi někdo poradit ? :(

Editoval Podbor (1. 11. 2010 10:31)

shadow
Člen | 1
+
0
-

Tenhle problém jsem teď řešil také, a kupodivu se mi podařilo lokalizovat příčinu, alespoň na úrovni konfigurace webového serveru. Použivám VirtualDocumentRoot pro hosting mnoha domén. Moje stejně nastavená Nette aplikace (Route::SECURED) vykazovala totožný problém s routováním, kdy korektně vyplněný RewriteBase v .htaccess neměl žádný účinek a výsledkem bylo 404 a zcela nefunkční aplikace. Nakonec jsem problém lokalizoval v direktivě DocumentRoot, kterou jsem z konfiguračního souboru odstranil (s VirtualDocumentRoot je více méně zbytečná). Je zajímavé, že jinak nastavený VirtualHost pro přístup k Nette aplikaci přes IPv6 fungoval i s nastaveným DocumentRoot (přirozeně adresář byl jiný, takže možná se to nějak tluče zde). Problém jsem dále neřešil, takže více informací nemám.