Installa la nostra toolbar!
Tips / Apache
addthis
Apache appende automaticamente l'estensione ai file
Author: Tafaz
Visits: 1460
Date: 15.11.2008

Negli scorsi giorni sono incappato in questo "strano" comportamento di apache (che poi vedremo che così strano non è). In poche parole stavo facendo un sito con i rewrite per gli url quando mi sono trovato che se chiamavo un'URL con il nome di un file esistente ma senza estensione apache automaticamente mi aggiungeva l'estensione .php e non eseguiva il rewrite.

Il rewrite è così strutturato
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} !(\.php)
RewriteRule (.*) index.php?r=$1&%{QUERY_STRING}

in poche parole s l'URL richiesto non è un file esistente o non è una directory esistente invia la richiesta a index.php passando come parametro r la URI richiesta e appende ogni eventuale query string. In questo modo anzichè avere molte righe di rewrite demando il compito di gestire i rewrite al file index.php, Il problema si verifica quando chiamo ad esempio http://miosito.com/info/ e nella webroot di miosito.com esiste un file chiamato info.php, info.html, ecc apache anzichè passare tutto allo script index.php mi visualizzava il file info.php.

Dopo qualche ora di scervellamento nei vari moduli di apache ho trovato che è l'opzione MultiViews che fa comportare Apache in questo modo in quanto se viene richiesto un path che nel server non esiste es. /some/dir/foo e foo non esiste e la directory /some/dir ha MultiViews abilitato Apache cerca nella directory i files chiamati foo.* e se ne trova uno lo serve all'utente.

MultiViews è un'opzione di apache per-directory e può quindi esser modificata sia dal file di configurazione di apache sia da .htaccess in qualsiasi di queste sezioni <Directory>, <Location> or <Files>.

nel mio caso è bastato quindi modificare il file di configurazione di apache mettendo

<Directory /var/www>
       Options -MultiViews
</Directory>

e riavviare apache

Aggiornamento del 30/03/2010

sugli hosting linux aruba se usate i mod_rewrite con le seguenti regole
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
e usate rewrite che puntano a file esistenti (esempio www.sito.com/contatti/ che punta a www.sito.com/contatti.php) ricordatevi nel file .htaccess di aggiungere Options -MultiViews ... ci ho perso quasi 2 ore oggi



Page 1 of 1


Se vuoi discutere con noi su questo articolo o comunque vuoi porci delle domande usa il nostro Forum

COMMENTI

Aggiungi un commento! +
(I commenti verranno moderati prima della pubblicazione)



Top