2009-12-22 5 views
1

Je suis allemand et je suis désolé pour ma putain sucking englisch.Comment puis-je définir un paramètre facultatif dans la Mod Rewrite-Syntax?

RewriteRule ^admin/(.*)$ index.php?admin=$1 

Voici un exemple. donc le résultat que je veux est par exemple l'identifiant à l'intérieur, mais comme un paramètre optionnel:

RewriteRule ^admin/(.*)/id-(.*)$ index.php?admin=$1&id=$2 

Ici, l'id ne doit pas définir c'est ce que je veux :)

L'exemple de lien (je veux que voici le même résultat):

www.exmple.com/admin/edit-user
www.exmple.com/admin/edit-user/id-1

le problème est: la règle prendre à tout moment la première façon avec seulement ceci:

RewriteRule ^admin/(.*)$ index.php?admin=$1 

Quelqu'un peut-il m'aider? :)

aimer les salutations m0.

Répondre

3

Essayez de changer l'ordre de vos règles et n'oubliez pas le drapeau [L] à la e nd:

RewriteRule ^admin/(.*)/id-(.*)$ index.php?admin=$1&id=$2 [L] 

RewriteRule ^admin/(.*)$ index.php?admin=$1 [L] 
2

Essayez un groupe de capture facultative:

RewriteRule ^admin/([^/]*)(/id-(.*))?$ index.php?admin=$1&id=$3 

S'il n'y a pas id spécifié, 3 $ est vide et vous aurez juste un réécrite id vide:

index.php?admin=edit_user&id= 

S'il est spécifié , alors vous obtiendrez l'identifiant aussi:

index.php?admin=edit_user&id=1 
1

L'expression .* est trop générale, car elle correspond à une longueur arbitraire de caractères arbitraires. Une meilleure expression serait [^/]+ qui correspond à un ou plusieurs caractères arbitraires sauf / (séparateur de segments de chemin).

Donc, essayez ces règles:

RewriteRule ^admin/([^/]+)$ index.php?admin=$1 
RewriteRule ^admin/([^/]+)/id-([^/]+)$ index.php?admin=$1&id=$2 

Pour la deuxième règle, vous pouvez également remplacer la deuxième [^/]+ avec [1-9][0-9]* qui correspondrait à des nombres entiers supérieur à 0.

RewriteRule ^admin/([^/]+)/id-([1-9][0-9]*)$ index.php?admin=$1&id=$2 
0

essayez ceci:

RewriteRule /admin/([^/]*)/?(id-(.*))?$ index.php?admin=$1&id=$3 
Questions connexes