2009-12-15 10 views
3

Si j'utilise:HT Accès - Mod Rewrite

RewriteEngine On 
RewriteRule ^.* controller.php 

Il enverrait toutes les demandes de Controller.php Mais si controller.php inclus un fichier CSS (/assets/css/main.css) puis ne fonctionnerait pas, comme lorsque le navigateur l'appelait, il redirigerait juste vers controller.php

Y at-il un moyen que je peux résoudre ce problème?

Répondre

6

Vous pouvez ajouter un condition d'exclure les URL qui peuvent être mis en correspondance avec les fichiers réellement existants:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^.* controller.php 

Le mot-clé -f va tester si le chemin absolu dans %{REQUEST_FILENAME} est un chemin vers un fichier régulier existant dans le système de fichiers et !-f est juste l'inverse.

Mais si vous avez une liste fixe de répertoires que vous souhaitez exclure, vous pouvez aussi le faire:

RewriteCond $0 !^(assets|foo|bar)/ 
RewriteRule ^.* controller.php 

Ce tests de condition si le match de l'ensemble RewriteRule motif (référencé avec $0) ne commence pas avec ni assets/ ni foo/ ni bar/. Si vous ne voulez pas traiter le match, vous pouvez également utiliser une expression niée directement dans votre directive RewriteRule:

RewriteRule !^(assets|foo|bar)/ controller.php 
+0

Ce n'est pas un très bon cas de sécurité car il permet un accès direct aux fichiers qui existent. La sécurité par l'obscurité si vous savez ce que je veux dire. – AbiusX

0

Essayez ceci:

RewriteEngine On 

RewriteCond %{REQUEST_URI} !\.css$ 
RewriteRule ^.* controller.php 

non testé, mais devrait fonctionner.