2011-10-06 5 views
3

Je travaille sur un référencement pour mon site, et en utilisant des URLs comme category/this-cat.html et category/this-cat-p2.html pour rediriger vers index.php?mode=viewCat&id=this-cat et index.php?mode=viewCat&id=this-cat&start=10 respectivement. Le problème est que ma RewriteRule a besoin d'une condition pour vérifier si la partie -p2 est présente dans l'URL, puis renvoyer 0 ou le chiffre après p.Url RewriteRule conditionnels

Règle actuelle:

RewriteRule ^category/(.*?)\.html$ index.php?mode=viewCat&title=$1

j'aurais pensé que la syntaxe correcte pour cela aurait été:

RewriteRule ^category/(.*?)(?(-p)(.*?)|0)\.html$ index.php?mode=viewCat&title=$1&start=$2

cependant, ce qui provoque le serveur pour renvoyer une erreur 500 . Même après avoir lu des tutoriels et travaillé avec eux la semaine dernière, j'ai encore peu d'emprise sur eux. Quelqu'un peut-il expliquer comment faire un conditionnel comme ce travail?

Répondre

2

Vous êtes proche. Je crois que ce que vous essayez de faire n'est pas de capturer le groupement optionnel -p#, mais que vous voulez le chiffre s'il existe. Le drapeau de non-capture pour un groupe est un préfixe ?:.

RewriteRule ^category/(.*?)(?:-p(\d+))?\.html$ index.php?mode=viewCat&title=$1&start=$2 

Note: I utilisé \d (chiffres) car il vaut mieux être précis sur ce que vous êtes correspondant. Aussi start aura un chiffre ou rien. Votre code côté serveur est mieux adapté pour gérer le reste de la logique que vous avez décrite.

+0

Fonctionne bien! Merci pour la correction! – chaoskreator