Presmerovani vsech adres do www/

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

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
+
0
-

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/

mrataja
Člen | 57
+
0
-

Pokud používáš např. Wamp, pak se to dá na lokále řešit „virtual hostem“

apache – httpd.conf

<VirtualHost *:80>
        DocumentRoot "c:/tvoje_slozka_s_projekty/test/www/"
        ServerName test
</VirtualHost>

win – hosts

127.0.0.1 test
terihei
Člen | 4
+
0
-

Tomas Jancik: Jo presne, nakopiroval jsem tam cely sandbox :-)

diky moc oboum, nakonec jsem jenom obsah /test/www/ presunul do /test/. Myslel jsem pred tim, ze to z nejakeho magickeho duvodu, ktery se dozvim az pozdeji, musi byt v podslozce /www, ale nastesti nemusi.

Tomas Jancik
Člen | 103
+
0
-

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)

Paradiso
Člen | 101
+
0
-

.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]
chuck_horis
Člen | 8
+
0
-

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
+
0
-

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.