Routování při index.php na výchozí nefunguje (ale jiné třebas test.php ano?)

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

Zdravím Vás,

mám problém s přesměrováním na úvodní stránku v případě, že se zadá:

http://www.xxx.cz/index.php

→ tenhle případ je tedy uveden i v QuickStart pomocí routy:

<?php
$router[] = new Route('index.php', array(
	'presenter' => 'Homepage',
	'action' => 'default',
), Route::ONE_WAY);
?>

což když zadám onu URL, tak mi to vrátí error „No route for HTTP request.“, zajímavé je, že jsem zkusil v Route přepsat index.php na třeba test.php a když jsem zadal http://www.xxx.cz/test.php, tak se mi to přesměrovalo správně.

Dle tohoto faktu soudím, že bude asi problém v .htaccess (?), ale ten zkoušel také růžně modifikovat, dle .htaccessů co jsem našel tady na webu a používám nyní tyto:

V rootu:

RewriteEngine On

RewriteRule ^\.htaccess$ - [F]

RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /document_root/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/document_root/.*$
RewriteRule ^(.*)$ /document_root/$1

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]

RewriteRule ^document_root/.*$ /document_root/index.php [NC,L]

a potom v oné složce document_root tento:

# disable directory listing
Options -Indexes

# configure PHP
# <IfModule mod_php5.c>
#    php_flag magic_quotes_gpc off
#    php_flag register_globals off
#    php_flag zend.ze1_compatibility_mode off
# </IfModule>

# mod_rewrite
<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>

Děkuji všem za radu s tímto problémem,

S pozdravem
frosty22

Vyki
Člen | 388
+
0
-

Ta doporučovaná adresářová struktura není dogma. Pokud tvůj hosting nepodporuje nastavení root adresáře, tak je skoro lepší udělat si adresářovou strukturu po svém. Já to dělám tak, že mám v rootu index.php, images, css, js, a adresář application, do kterého dám app a libs. Žádné zbytečné .htaccess nejsou potom potřeba, nehledě na to, že ovlivňují rychlost aplikace (ale rozhodně méně než větší množství rout v nette). Chtěl jsem se ale zeptat, proč máš v tom .htaccess tento řádek: RewriteRule ^\.htaccess$ - [F]. Každý slušný hosting má v základní konfiguraci apache toto:

<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

takže ten řádek kde zakazuješ přístup k .htaccess souborům by neměl být potřeba.

Editoval Vyki (4. 4. 2010 10:49)

Ondřej Mirtes
Člen | 1536
+
0
-

.htaccess potřebuješ do toho adresáře application, abys tam měl deny from all.

frosty22
Člen | 373
+
0
-

No asi jsme si přímo nerozumněli, kompletní routování pracuje celé aplikace správně, kromě právě té routy na index.php, u které potřebuji aby mě přesměrovala klasicky na hlavní stranu, jako je v Quickstartu..

Proto jsem právě uváděl, že jsem zkoušel třeba home.php v té routě a ta mě přesměrovala správně, ale jakmile tam zadám index.php, tak už to správně nepřesměruje ⇒ Z tohoto důvodu si myslím, že bude problém v .htaccess.

Jinak tento problém mám jak na localhostu, tak i na serveru, takže podporou root adresáře to nebude..

Ondřej Mirtes
Člen | 1536
+
0
-

Předělel si adresářovou strukturu:

app/
  - bootstrap...
  - presenters
  - ...
  - .htaccess (deny from all)
libs/
  - Nette
  - dibi
  - ...
  - .htaccess (deny from all)
css/
gfx/
images/
.htaccess (ten ze Skeletonu, ten, co uvádíš jako druhý)
index.php

Problém bude v tom tvém .htaccessu, který používáš pro přesměrování do podsložky document_root, předělej si tudíž strukturu tak, abys ho vůbec nemusel používat.

frosty22
Člen | 373
+
0
-

Děkuji tohle řešení pomohlo, ještě mám tedy jeden problém, ale ten se týká něčeho jiného, čili založím radši nový topic :)

Vyki
Člen | 388
+
0
-

Ondřej Mirtes napsal(a):

.htaccess potřebuješ do toho adresáře application, abys tam měl deny from all.

To je mi jasné, ale moje otázka se týkala toho, proč zakazovat přístup do všech .htaccess v prostoru, když už je to zakázané ve výchozím nastavení apache.

Editoval Vyki (4. 4. 2010 15:51)

Aurielle
Člen | 1281
+
0
-

Ten .htaccess nezakazuje přístup jen do sebe, zakazuje přístup do celého adresáře app nebo libs, pokud by náhodou adresářová struktura byla zvolena tak, že by tyto adresáře mohly být přes prohlížeč dostupné.

frosty22
Člen | 373
+
0
-

Jasně, ale Vyki měl namysli pouze řádek:

RewriteRule ^\.htaccess$ – [F]

která zakazuje přístup do .htaccess, což je na „všech“ hostingách stejně zakázáno, takže je to zbytečné..

Vyki
Člen | 388
+
0
-

frosty22 napsal(a):

Jasně, ale Vyki měl namysli pouze řádek:

RewriteRule ^\.htaccess$ – [F]

která zakazuje přístup do .htaccess, což je na „všech“ hostingách stejně zakázáno, takže je to zbytečné..

Přesně to jsem myslel. Jenom jsem se lekl, že existují nějaké hostingy, kde na to zapomněli a musel bych to prověřovat :o)

Panda
Člen | 569
+
0
-

Apache má přístup do .htaccess zakázaný ve výchozím nastavení, takže by to na nějakém hostingu museli naopak povolit. A pokud by to na nějakém hostingu povolili, tak bych si dovolil o jejich kvalitách vážně pochybovat.