Routování s HTTPS, nelze přesměrovávat
- Podbor
- Člen | 19
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.
- Podbor
- Člen | 19
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.
- Podbor
- Člen | 19
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
@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
@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
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
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
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.