Jednoduchá stránka a odkazy
- kedrigern
- Člen | 102
Zdravím,
snažím se vytvořit zcela primitivní stránku v Nette 2.0.3-PHP5.3 na PHP 5.3.10 (z Ubuntu repozitáře).
Stáhnu Nette, ověřím, že checker.php nic nehlásí. Spustím defaultní sandbox a také jde.
Nyní přepíšu:
sandbox/app/templates/Homepage/default.latte :
{block content}
<h2>Homepage</h2>
<p>This is our great homepage.<p>
{/block}
{block head}
{/block}
Vytvořím složku: mkdir sandbox/app/templates/About
se souborem default.latte, který má obsah:
{block content}
<h2>About</h2>
<p>About page.<p>
{/block}
{block head}
{/block}
sandbox/app/presenters/AboutPresenter.php:
<?php
class AboutPresenter extends BasePresenter
{
public function renderDefault()
{
}
}
A do @layout.latte přídám jednoduché menu:
<ul>
<li><a href="{link Homepage:}">Home</a></li>
<li><a href="{link About:}">About</a></li>
</ul>
No homepage a link na homepage funguje. Link na about nikoliv:
Not Found
The requested URL /h2/sandbox/www/about/ was not found on this server.
app/templates/Homepage a app/templates/About i přislušné default.latte mají zcela stejná přístupová práva a vlastníky. Presenter má též stejná práva a vlastníka jako zbylé prezentery. (Nejdřív sem si myslel, že to musí být od přístupových práv, proto to zdůrazňuji)
Je mi zcela jasné, že to bude nějaká blbost, ale nemohu přijít na to co. Postupoval jsem dle quickstartu (co se techniky týče).
- Tomas Jancik
- Člen | 103
pokud mas cistou instalaci Ubuntu, mrkni se jeste, jestli mas krome mod_rewirte povolen i direktivu Allow override
- kedrigern
- Člen | 102
Našel jsem tuto diskusi, což je viditelně stejný problém.
V Apachovi se moc nevyznám (vždy mi o servery staral někdo jiný),
čili:
/var/www/<project>/www/ (root samotného webu,
/var/www/ je klasicky root všech webů) mám .htaccess
takovýto:
# Apache configuration file (see httpd.apache.org/docs/2.2/mod/quickreference.html)
# disable directory listing
Options -Indexes
# enable cool URL
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /var/www/h4/www/
# 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>
# enable gzip compression
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript application/javascript application/json
</IfModule>
# allow combined JavaScript & CSS. Inside of script.combined.js you could use <!--#include file="script.js" -->
<IfModule mod_include.c>
<FilesMatch "\.combined\.(js|css)$">
Options +Includes
SetOutputFilter INCLUDES
</FilesMatch>
</IfModule>
Přímo ve /var/www/<project>/ nemám žádný .htaccess – kód se nechystám nikam nasazovat (jen se Nette učím), čili jsem ho nepotřeboval. Ale on tam asi je potřeba kvůli tomu rootování, či není?
Tomáš: Povoloval jsem přes a2enmod rewrite, v /etc/apache2/sites-available/default mám:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
[...]
</VirtualHost>
- castamir
- Člen | 629
zakomentuj následující a vyzkoušej to (řešil úplně stejný problém před týdnem). A ještě mi vypiš odkaz na About:default, který ti to na úvodní stránce vypíše
# enable gzip compression
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript application/javascript application/json
</IfModule>
# allow combined JavaScript & CSS. Inside of script.combined.js you could use <!--#include file="script.js" -->
<IfModule mod_include.c>
<FilesMatch "\.combined\.(js|css)$">
Options +Includes
SetOutputFilter INCLUDES
</FilesMatch>
</IfModule>
- kedrigern
- Člen | 102
Zakomentoval jsem a nic :(.
Menu jsem si napsal takto (psal jsem ze zoufalství různé možnosti):
<ul>
<li><a n:href="default">Home</a></li>
<li><a n:href="About:default">About:default</a></li>
<li><a n:href="about:default">about:default</a></li>
<li><a n:href="About:">About:</a></li>
<li><a n:href="about:">about:</a></li>
</ul>
Vygeneruje to:
<ul>
<li><a href="/h4/www/">Home</a></li>
<li><a href="/h4/www/about/">About:default</a></li>
<li><a href="/h4/www/about/">about:default</a></li>
<li><a href="/h4/www/about/">About:</a></li>
<li><a href="/h4/www/about/">about:</a></li>
</ul>
Ale prostě ten odkaz /h4/www/about/ nefunguje, zatímco h4/www/ funguje správně.
h4/app/presenters/AboutPresenter.php i h4/app/presenters/HomepagePresenter.php mají stejná práva. A na homepage Laděnka píše, že se to matchlo přes route: <presenter>/<action>[/<id>]
Popřípadě nemohli byste mi někdo poslat takovýto hotový projekt? (2–3 statické stránky, postaveno na Nette 2 pro PHP5.3 na nějakém unixovém systému), tak že vám chodí (čili jsou správně .htaccess, přis. práva, verze Nette). Pak bych se pošťoural sám v rozdílech, ale takhle jsem docela v koncích, neb nevím, co dále zkusit.
Editoval kedrigern (14. 5. 2012 16:54)
- kedrigern
- Člen | 102
Tak
// Setup router
$container->router = new Nette\Application\Routers\SimpleRouter('Homepage:default');
//$container->router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
//$container->router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
zabralo. Díky ti moc.
Nicméně si stále myslím, že modul funguje správně (z pohledu Apache) akorát je špatně nastaven. Nicméně nevím kde hledat chybu. Nemáte někdo nějaký ucelený článek? Jsem nejistý právě mezi chybami u kterých nevím zda jsou od špatného nastavení systému, anebo od Nette. Popřípadě nevím jaké nastavení Nette vyžaduje (to je tento případ).
A jednu otázku pro ujištění. Routování jde později změnit, že? Čili mohu se s Nette naučit bez cool url a později řešit nastavení.
- castamir
- Člen | 629
zkus následující .htaccess:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
# 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>
Editoval castamir (14. 5. 2012 19:37)