2009-08-19 4 views
1

J'essaie de rediriger les URL depuis example.net/customname ou example.net/customname/ vers example.net/my/home.php?username=customname. Cela en soi est pas compliqué:Réécriture d'URL pour exclure les répertoires existants

RewriteRule ^([a-zA-Z0-9_-]+)$ my/home.php?username=$1 
RewriteRule ^([a-zA-Z0-9_-]+)/$ my/home.php?username=$1 

Cependant, je veux exclure mes répertoires et fichiers existants, tels que example.net/about/ et example.net/files. Je n'arrive pas à comprendre comment utiliser RewriteCond (ai-je besoin de plusieurs conditions de réécriture?) Pour exclure des items comme example.net/about/ d'être réécrits en example.net/home.php?username=about. Comment puis-je faire ceci?

Merci!

EDIT: Voici la solution exacte ...

RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^([a-zA-Z0-9_-]+)/?$ my/home.php?url=$1 [NC,L] 
+0

En ce qui concerne votre édition: pourquoi utilisez-vous deux ensembles de règles complètement distincts dont la seule différence est un seul caractère? C'est verbeux et inefficace, donc je suggère d'utiliser l'option qualificative (le point d'interrogation) comme localshred et je l'ai fait dans nos réponses. –

+0

Tout à fait raison, j'ai changé ma réponse pour réfléchir. – Wickethewok

Répondre

4

RewriteCond a quelques modèles spéciaux dans ce but précis. Essayez ceci:

RewriteCond %REQUEST_FILENAME ! -d 
RewriteCond %REQUEST_FILENAME ! -f 
RewriteRule ^([a-zA-Z0-9_-]+)/?$ my/home.php?username=$1 
+1

J'ai vu le -d et -f avant, mais je n'ai pas réalisé que c'est ce qu'ils ont fait. Merci! J'ai posté ma solution syntaxiquement correcte complète ci-dessus. – Wickethewok

2

Vous pouvez utiliser un RewriteCond (réécrire condition), semblable à ceci:

RewriteCond %{REQUEST_URI} ! ^\/(about|files)\/?$ 
RewriteRule ^([a-zA-Z0-9_-]+)/?$ my/home.php?username=$1 [L] 

Cela s'appliquerait efficacement que la Règle si elle passe à travers toutes les conditions ci-dessus, semblable à l'utilisation des instructions if.

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond