Lepší detekce aktivního .htaccess a mod_rewrite

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

Ahoj,
řešil jsem problém s tím, že server neměl povolené parsování .htaccess souboru a
pak při konfigurace routerů nefungovala, protože se nenačetli přepisovací pravidla
z mod_rewrite.

I v případě, že jsem před inicializací routerů měl něco takového

<?php
if (function_exists('apache_get_modules') && in_array('mod_rewrite', apache_get_modules() )) {
$router[] = new Route('<presenter>/<action>/<id>'
...
}
else {
$router[] = new SimpleRouter('Homepage:default');
}
?>

kód nefungoval, přestože Apache měl naloadovaný mod_rewrite, ale nečetl pravidla z htaccess!

Jako dobrý workaround se mi jeví následující kód:

<?php
$apache_modules = (function_exists('apache_get_modules')) ? apache_get_modules() : array();
if (in_array('mod_rewrite', $apache_modules) && in_array('mod_env', $apache_modules) && isset($_SERVER['NETTE_HTACCESS'])) {
  $router[] = new Route('<presenter>/<action>/<id>', array(
  ...
else
  $router[] = new SimpleRouter('Homepage:default');
?>

a v /document_root upravený .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
  <IfModule mod_env.c>
    SetEnv NETTE_HTACCESS ok
  </IfModule>
</IfModule>

Takto je zajištěno, že se v aplikaci dozvím zda-li Apache zpracoval .htaccess a načetl
přepisovací pravidla.

Nevidíte tam někdo nějakou chybu? Mám pocit, že takto by to mělo bezvadně fungovat.

Zatím,
Honza

Editoval nejman (23. 3. 2010 16:21)

nejman
Člen | 13
+
0
-

Panda napsal(a):

Viz Pozor na funkci apache_get_module v PHP 5.3.

Aha,
tak pro případ Fast-CGI by bylo možno celé testování ‚mod_rewrite‘ a ‚mod_env‘ vyhodit
a nechat tam jen test zda-li existuje v proměnných prostředí $_SERVER['NETTE_HTACCESS'].
Koneckonců fce pro stažení modulů Apache není nutná.

Honza

Ondřej Mirtes
Člen | 1536
+
0
-

Pěkné, moc pěkné!!! Palec nahoru, hned si to jdu naimplementovat :)