not found – 404 u odkazů na presentery
- trisha
- Člen | 20
Zdravím,
zkouším si statický web v nette a při odkazech v menu mi to vždy vyhodí
404 file not found.
- http://localhost/nette/ – funguje (refresh a zustane na homepage)
- http://localhost/nette/products/ – hodí vždy error (V templates + presenters mám založeno)
mod_rewrite mi běží. Jsem na localhostu – apache2 v ubuntu.
htaccess vypadá takhle
Je chyba někde v nastavení mod_rewrite? Popř. co bych měla udělat pro to, abych zjistila kde je chyba?
Díky za odpovědi!
- trisha
- Člen | 20
Majkl578 napsal(a):
Není náhodou URL
http://localhost/nette/www/
, nebo používáš oproti sandboxu upravenou verzi adresářové struktury?RewriteBase by mělo vést do rootu webu, tzn.
RewriteBase /nette/
(popř.RewriteBase /nette/www/
), případně by mohlo stačit zakomentovat/neuvádět.
No zkusila jsem věci z www dát do rootu, abych tam neměla to www/ ale jen localhost/ je to špatně? Nebo jak to vyřešit jinak? Nikde jsem nenašla nějaký způsob. Přece když mám web, tak chci mít web.cz a ne web.cz/www/.
- Majkl578
- Moderator | 1364
No, to asi záleží na hostingu, ty mizerné ti takovou strukturu nedovolí.
Pak jsou dvě cesty.
Jedna je ta tvoje, přesunout obsah www o úroveň výš a upravit cesty
v index.php (a dát si dvojitý pozor na oprávnění k přístupu do složek
app, libs a zejména temp a log).
Druhá je zachování výchozí struktury a směrovat všechny požadavky do
www/
. Kdysi jsem to na jednom webu také řešil, protože běžel
někde na mizerném sdíleném hostingu. Měl jsem tedy 2 htaccessy, jeden
v rootu projektu a druhý ve www/. Ten v rootu vypadal takto:
Options -Indexes +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule ^$ www/ [L]
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule (.*) www/$1 [L]
(Možná ta pravidla lze sloučit, už si nepamatuji, proč jsou takto oddělena.)
Druhý, ve www/
, byl pak už standardní:
Options -Indexes
<IfModule mod_rewrite.c>
RewriteEngine On
# RewriteBase / - neodkomentovávat!
# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
</IfModule>
V Nette/bootstrapu nebyly žádné dodatečné změny potřeba (alespoň si na nic nevzpomínám), web na této konfiguraci funguje doposud. :)
- Draffix
- Člen | 146
Přesně jak psal Majkl578, buď hodit vše o úroveň výše nebo dodat .htaccess s přesměrováním. Já osobně mám tohle:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ /www/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/www/
RewriteRule ^(.*)$ /www/$1
</IfModule>
Nicméně pokud vím, tak úplně stejně funguje i přesměrování co uvedl Majkl.
- Jan Endel
- Člen | 1016
pokud je to ještě v podsložce neaktuální tak v umístění /neakutalni/nette/.htaccess editovat do tvaru:
RewriteBase /neaktualni/nette/.htaccess
Kdyžtak je tady moc pěkné popovídání
- trisha
- Člen | 20
ufff, nefungoval vůbec žádnej htaccess nikde :)
Tak pro ty co používaji ubuntu + apache2
sudo gedit /etc/apache2/sites-available/default
a změňte si AllowOverride None na AllowOverride All
povolit mod_rewrite
sudo a2enmod rewrite
restart… ať taky nestrávíte celej den studováním htaccessu a mod_rewrite, když vám žádnej htaccess nejede. Ale tak alespoň to už umim :D
Editoval trisha (25. 4. 2013 2:07)
- trisha
- Člen | 20
Majkl578 napsal(a):
Tak to se pak těžko opravuje, něco, co vůbec fungovat nemůže. :) A jaké řešení nakonec funguje resp. jaké jsi použila?
Všechno ze složky www jsem si dala o adresář výše ;) Takhle se mi to líbí víc. Ono to fungovalo i před tím, jen prostě nešel ten htaccess a mod_rewrite. Na wedosu mi to šlo od začátku, ale na tom localu právě ne. Moc děkuju za rady! Konečně můžu postopit k dalšímu zkoumání nette. :)
EDIT: gratuluju!
Editoval trisha (25. 4. 2013 3:14)