Jednoduchá stránka a odkazy

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

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).

voda
Člen | 561
+
0
-

Máš povolený mod_rewrite?

kedrigern
Člen | 102
+
0
-

checker.php hlasí že ano. Ty příklady z quickstartu jsem také rozchodil.

Koukám, že ma Homepage Laděnka hlasí, že byl použit <presenter>/<action>[/<id>] , čili routování obecně asi nějak funguje.

Editoval kedrigern (14. 5. 2012 1:37)

Šaman
Člen | 2666
+
0
-

Je to sice střelba od boku, ale problém tuším v .htaccess, konkrétně v RewriteBase.
Zkus ji odkomentovat a nastavit na /www/.

Editoval Šaman (14. 5. 2012 3:54)

Tomas Jancik
Člen | 103
+
0
-

pokud mas cistou instalaci Ubuntu, mrkni se jeste, jestli mas krome mod_rewirte povolen i direktivu Allow override

kedrigern
Člen | 102
+
0
-

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

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

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)

voda
Člen | 561
+
0
-

404 je od Apache nebo od Nette?

kedrigern
Člen | 102
+
0
-

Nevím, není tam laděnka, čili od Apache? (tipuji)

voda
Člen | 561
+
0
-

Pokud je tedy od Apache, tak ti nefunguje mod_rewrite.

Jestli se ti to nechce řešit, tak můžeš v bootstrap.php místo new Route použít new Nette\Application\Routers\SimpleRouter('Homepage:default');.

kedrigern
Člen | 102
+
0
-

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

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)

kedrigern
Člen | 102
+
0
-

Tak jsem to rozchodil – přeinstaloval jsem Apache a znovu zkusil sestavit projekt ze sandboxu. Nejsem si úplně jist co je jinak.

Všem moc díky za pomoc, koho z vás potkám ten má u mě pivo :-).

Šaman
Člen | 2666
+
0
-

Oki, téma chápu jako uzavřené, tak si dovolím offtopic.
Neděláš náhodou historický šerm, konkrétně renesanci (soudě podle avatara)? Pokud jo, tak reálně hrozí, že se potkáme někde na bitvě. Čímž jsme se zase vrátili k tématu.. toho piva :)

kedrigern
Člen | 102
+
0
-

Pohybuji se okolo, ale přímo nedělám. Já hlavně larpy, dřevárny a dnes převládají úplně jiné věci (svobodná kultura, matfyz etc.).

Ale třeba na Valdštejnkách ve Frýdlantu (koukám, že si z Liberce) bývám :).