2009-07-25 5 views
11

J'écris un CMS en PHP, et maintenant je travaille sur la fonction thèmes. J'ai un fichier .htaccess:Apache mod_rewrite seulement si la requête ne commence pas par '/ THEMES /'

RewriteEngine ON 
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)$ index.php?m=$1 
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)/(.+)$ index.php?m=$1&p=$2 

Si je demande à:

/page 

il faut charger la fonction d'affichage de la page appelée classe.

Si je demande à:

/page/test 

doit charger la fonction d'affichage de la page appelée classe, avec le paramètre « test ». Tout cela fonctionne,

Mais je le veux appliquer les RewriteRules SEULEMENT si la demande ne pas départ avec:

/THEMES/ 

Je peux donc appliquer des styles CSS etc ...

Quelqu'un peut-il m'aider? Merci.

Répondre

11

Vous pouvez utiliser une règle supplémentaire pour arrêter le processus de ré-écriture:

RewriteRule ^THEMES/ - [L] 
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)$ index.php?m=$1 
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)/(.+)$ index.php?m=$1&p=$2 
+3

Bon à savoir que vous pouvez réécrire - pour conserver une URL/modèle donné – eyelidlessness

+0

man Merci. Cela a fonctionné. –

+0

Je pense que la première règle devrait commencer par '^ /' – Behrang

22

Ajouter ce avant vos règles de réécriture:

RewriteCond %{REQUEST_URI} !^/THEMES/ 
+0

Bien que la solution @Gumbo fonctionne, la vôtre est plus élégante ... – NemoStein

0

Si vous voulez inclure des fichiers css/js tout en utilisant URL- réécriture utilisez cette balise pour spécifier l'URL principale.

< base href="http://www.your-web-site-adress.com" > 

Ensuite, vous pouvez facilement inclure vos fichiers css/js comme ça:

< script src="/blabla.js" > 

il va ajouter href de base comme préfixe.

1

faire quelque chose comme:

RewriteRule ^THEMES - [L] 

Cela signifie: si la demande commence par THEMES, servent simplement.

Une autre solution possible est:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

Cela signifie: ne réécrit pas si la demande se résout à un fichier existant (première ligne) ou un répertoire (deuxième ligne).

Peut-être que vous devriez lire les documentations, est vraiment bien écrit.

+0

La seconde n'a pas fonctionné. –

+0

Etes-vous sûr que le fichier/répertoire demandé existe? Cela me semble étrange, cela fonctionne sur mon système. – sydarex

Questions connexes