2010-11-17 18 views
0

Dans mon fichier .htaccess je les règles suivantes:mod_rewrite RewriteCond problème

RewriteEngine on 
RewriteBase /myblog.com/   
RewriteRule ^author/([^/]*)/?([^/]*)/?$ blog/author.php?author=$1&contactid=$2 [L] 
     RewriteRule ^blog/([^/]*[^/index.php])/?([^/]*)/?([^/]*)/?$ blog/index.php blog=$1&category=$2&article=$3 [L] 

Mon problème est qu'une telle demande est myblog.com/author/Jim+Jones/28 se redirigé vers la règle suivante , même si j'ai un drapeau [L] là-bas?

Comment puis-je exclure la deuxième règle du lancement lorsque "/ author /" apparaît dans l'URL?

Un grand merci, Jason

Répondre

0

/auteur/Jim Jones +/28 ne devrait pas se laisser prendre par l'un de ceux-ci comme aucune de vos règles attraper les URL commençant par/et^au début de vous regex-es indique clairement que pour la première règle, il doit commencer par 'auteur /' (notez non/au début).

MISE À JOUR: Ce qui se passe, je pense, c'est que des requêtes comme myblog.com/author/Jim+Jones/28 sont réécrites deux fois. D'abord par la première règle puis par la seconde. Si c'est le cas, vous devrez rendre la deuxième règle plus restrictive. Ne le laissez pas réécrire les requêtes qui ont author.php dans eux par exemple.

MISE À JOUR 2: OK, donc ce serait probablement le meilleur dans votre cas est d'ajouter une condition pour la 2ème clause:

RewriteEngine on 
RewriteBase /myblog.com/   
RewriteRule ^author/([^/]*)/?([^/]*)/?$ blog/author.php?author=$1&contactid=$2 [L] 

RewriteCond %{THE_REQUEST} !(author\.php) 
RewriteRule ^blog/([^/]*[^/index.php])/?([^/]*)/?([^/]*)/?$ blog/index.php?blog=$1&category=$2&article=$3 [L] 
+0

Merci gligoran, j'ai raté le RewriteBase dans mon exemple. J'ai mis à jour les règles ... – Jason

+0

Mise à jour: "Si c'est le cas, vous devrez rendre la 2ème règle plus restrictive." C'est ce que j'essaie de faire ?? Comment puis je faire ça? – Jason

+0

BTW: Vous avez une petite erreur dans votre deuxième règle de réécriture. L'URL qu'il réécrit aussi manque le? entre la partie principale et la chaîne de requête. – gligoran