RewriteRule v .htaccess <document_root>u

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

Přeji krásný den.

Měl bych dotaz k následujícímu (vyňato z .htaccess v document_rootu):

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

Proč se i po kontrole, zda se nejedná o soubor ani o adresář, ověřuje, že URL nekončí na žádnou z uvedených přípon? Pokud mám v bootstrapu následující,

Route::$styles['filename'] = array(
	Route::PATTERN => '.*',
);

$router[] = new Route('stahnout/<filename>', array(
	'presenter' => 'Download',
	'action' => 'default',
));

tak se kvůli zmiňovanému pravidlu ani nepošle požadavek na index.php, čili nezavadí o Nette.

Samozřejmě jsem si to přepsal na

RewriteRule (.*) index.php [L]

Jen by mne zajímalo, zda-li někdo neví, proč je stávající pravidlo takové, jaké je.

Děkuji.

MilanLempera
Člen | 11
+
0
-

Pravilo !-f je splněno, pokud se jde o neexistující soubor.

U uvedených typů souborů většinou nejde o chybu, kterou je potřeba oznamovat uživateli ( v praxi nejčastěji neexistující favicon.ico, robots.txt,… nebo překlep v cestě k souboru)

Takže předpokládám, že spouštět kvůli takovému požadavku framework je zbytečná zátěž serveru, protože prohlížeč chybovou stránku, kterou vygenerujete stejně s největší pravděpodobností zahodí.

Editoval MilanLempera (28. 1. 2011 14:58)

uestla
Backer | 796
+
0
-

Jasně, čili pokud soubor (resp. adresář) pod tímto názvem neexistuje, znamená to, že se k němu ani nepřistupuje. Chápu, že je kvůli překlepu zbytečné volat na pomoc framework, nicméně pro můj případ je úprava nezbytná.

Díky.