Nette, mod_rewrite, posunutí adresářů
- potapnik
- Člen | 127
Zdravím všechny, řeším následující problém. Mám standardní adresářovou strukturu Nette Skeletonu, ale jelikož nemůžu jít do nadřazené složky, přistupuju rovnou k document_root přes následující mod_rewrite pravidla:
RewriteEngine On
RewriteRule ^.*$ document_root/$0 [L]
což přesměruje výstup do document_root…jenže v document_root je standardní Nette mod_rewrite rules a prostě to celé dohromady nefunguje, hází to chybu, že nemůže najít Presenter, kterej by to vůbec hledat nemělo…příklad: http://localhost/…kty/Skeleton hlásí 404 s tím, že nemůže najít ProjektyPresenter. Složka projekty/Skeleton obsahuje výše zmíněný pravidla v htaccessu a pak standardní distribuci Nette (app/document_root/libs). Můj typ je, že tim přesměrováním matu Nette překladač adres, ale nevím, jak mu pomoct, nebo co dělám špatně. Předem díky za tipy. :-)
J.
- arron
- Člen | 464
Nette hleda presentery na zaklade definice rout. A v tom bych videl problem. Zkusil bych pred kazdou masku routy pridat jeste ten document_root.
$router[] = new Route('document_root/index.php', array(
'presenter' => 'Homepage',
'action' => 'default',
), Route::ONE_WAY);
$router[] = new Route('document_root/<presenter>/<action>/<id>', array(
'presenter' => 'Homepage',
'action' => 'default',
'id' => NULL,
));
- potapnik
- Člen | 127
Abych ještě trochu objasnil ten problém: mám následující adresářovou
strukturu:
c:\htdocs (to je root localhostu)
c:\htdocs\projects\Skeleton
c:\htdocs\projects\Skeleton\app
c:\htdocs\projects\Skeleton\libs
c:\htdocs\projects\Skeleton\document_root
Když dám do prohlížeče localhost/projects/Skeleton/document_root, tak všechno funguje jak má. Ale já bych „moc rád“ :-) zadal do prohlížeče jenom localhost/projects/Skeleton samozřejmě s nadefinovaným htaccesem, aby veškerou komunikaci interně přesměroval na localhost/projects/Skeleton/document_root. Ale zatím nic úspěšně nefunguje. Když dám do routy $router[] = new Route(‚projects/Skeleton/<presenter>/<action>/<id>‘…tak to funguje, ale zase nefungujou relativní cesty přes {basePath}…tak už vážně nevím, co a jak :-)
- Patrik Votoček
- Člen | 2221
místo aby jsi to přidával do rout nastav si to jako
RewriteBase
v .htaccess souboru.
- Ondřej Mirtes
- Člen | 1536
Nastav si jinak VirtualHost v Apachi a nemusíš laborovat nad těmito
problémy. Anebo si uprav adresářovou strukturu, aby app a libs byly uvnitř
document rootu. Je to jen detail, když si dáš pozor na skrytí obsahu app a
libs pomocí Deny from all
.
- mm-marek
- Člen | 61
Nebo na lokálu nastavit přes apache, na hostingu v htaccess viz
http://diskuse.jakpsatweb.cz/?…
- nanuqcz
- Člen | 822
Jde nějak těsně před voláním $application->run();
v bootstrapu upravit už vytvořené routy? Pak by totiž byl tenhle problém
vyřešený a routy by se daly automaticky přes nějaký skript opravit.
Stejně jako Potapnik se mi nelíbí, že musím vytahovat soubory z
public
(v Nette 2 adresář www
) ven. Prostě
patří do www
a chci je tam nechat :-) Bohužel metoda
setMask()
ve třídě Route
je nastavená jako
private, takže to nejde :-( Nějaké nápady?