Presmerovani vsech adres do www/
- terihei
- Člen | 4
Zkousim delat prvni stranky v Nette a hned jsem narazil na problem, na ktery
nemohu najit reseni. „Projekt“ mam na localhostu v podslozce
test/
. Kdyz zadam http://localhost:8888/test/www/...
tak vse funguje, ale ja bych samozrejme chtel, aby vsechny odkazy fungovaly bez
/www
. Do slozky test
jsem tedy pridal soubor
.htaccess
s timto obsahem:
RewriteEngine on
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ www/index.php
ale pri zadani jakekoliv adresy http://localhost:8888/test/...
nette vzdy hleda TestPresenter, ktery tam samozrejme neni. Viz chyba:
Nette\Application\BadRequestException #404
Cannot load presenter 'Test', class 'TestPresenter' was not found in '/Users/Petr/Documents/www/test/app/presenters/TestPresenter.php'
Chtel bych, aby se to pri zadani adresy
http://localhost:8888/test/nejaka/adresa
, choval stejne jako
http://localhost:8888/test/www/nejaka/adresa
a samozrejme, aby se
linky vyvtvarely bez www/
. Mam Nette Framework 2.0-beta, PHP 5.3.6,
Apache/2.2.21 (Unix).
Diky za pomoc
- Tomas Jancik
- Člen | 103
ze ty jsi nakopiroval cely sandbox do slozky test/?
1] obsah slozky localhost/test/www/ presunes primo v localhost/test/ (a nezapomen spravne upravit cesty, prip. celou adresarovou strukturu
2] mozna by to slo udelat spravne nastavenym .htaccess souborem umistenym v localhost/test/
- Tomas Jancik
- Člen | 103
terihei wrote:
Myslel jsem pred tim, ze to z nejakeho magickeho duvodu, ktery se dozvim az pozdeji, musi byt v podslozce /www, ale nastesti nemusi.
ono je to tak, ze slozka /www by jako jedina mela byt pristupna z internetu… ostatni by nemeli byt verejne pristupne (kvuli bezpecnosti)
- chuck_horis
- Člen | 8
Paradiso napsal(a):
.htaccess pravidlo by mohlo vypadat nějak takto:
RewriteEngine on RewriteCond %{REQUEST_URI} !^www/ RewriteCond %{REQUEST_URI} !^/www/ RewriteCond %{DOCUMENT_ROOT}/www/%2 -d RewriteRule (.*) www/%2/$1 [DPI]
Řeším stejný problém, také se mi povedlo dát soubor index.php mimo
www,ale raději bych to měl tak, jak to je v originálním skeletonu.
Zkoušel sem v adresáři sandbox vytvořit .htacces s tímto pravidlem, ale
nějak to nefunguje :\
Prosím o rady, chtěl jsem to sám upravit, ale musím říct, že .htacces je
docela alchymie :D
- Panda
- Člen | 569
Pokud na hostingu nejde document_root umístit do www
a tím
znepřístupnit ostatní složky, jediné rozumné řešení je umístit obsah
www
o adresář výš.
Smyslem oddělení je opravdu jen znepřístupnit obsah složek
app
, libs
, log
, temp
(a
případně dalších). Když to na hostingu nejde, tak to nejde a nedá se nic
dělat. Nějakými čachry s .htaccess
si akorát přiděláváte
práci a zavádíte potenciální zdroj chyb a divného chování (vizte
například příběh o tom, jak mod_rewrite
ublížil dívce).
Navíc pokud máte možnost v .htaccess
nastavit rewrite, máte
v něm skoro jistě i možnost ovlivnit přístup do složek. A přesně to
skeleton už omezené má, takže o bezpečnost nepřicházíte.