2009-03-10 11 views

Répondre

4
RewriteRule ^/cat_ap~nid~(.*)\.htm$ /cat_ap?nid=$1 [R] 

Le [R] à la fin est facultative. Si vous l'omettez, Apache ne redirigera pas vos utilisateurs (il servira toujours la bonne page).

Si la partie nid est également une variable, vous pouvez essayer ceci:

RewriteRule ^/cat_ap~([^~]+)~(.*)\.htm$ /cat_ap?$1=$2 [R] 

EDIT: Comme Ben Blank a dit dans son commentaire, vous pouvez restreindre l'ensemble des URL valides. Par exemple, vous pouvez vous assurer un JNV existe, et qu'il est numérique:

RewriteRule ^/cat_ap~nid~([0-9]+)\.htm$ /cat_ap?nid=$1 

ou si la partie JNV est une variable, qu'il se compose uniquement de caractères alphabétiques:

RewriteRule ^/cat_ap~([A-Za-z]+)~([0-9]+)\.htm$ /cat_ap?$1=$2 
+0

Vous souhaiterez peut-être limiter les caractères correspondants (voir les commentaires sur la réponse de Kristina). Par exemple, si vos ID sont toujours numériques, essayez d'utiliser ([0-9] +) au lieu de (. *). –

+0

Oui, j'ai fait le commentaire sur la réponse de Kristina. =) J'ai pensé à modifier ma réponse, mais la question n'énonce pas une telle exigence. De toute façon, je vais modifier ma réponse pour référence. –

1

Supposant les parties variables ici sont les « JNV » et le 5964, vous pouvez le faire:

RewriteRule ^/cat_ap~(.+)~(.+).htm$ ^/cat_ap?$1=$2 

le premier « (. +) » correspond à « JNV » et le second correspond à « 5964 ».

+0

Je ne suis pas sûr que ça va marcher, ça ne correspond pas à /cat_ap~nid~foo~5964.htm? –

+0

Je suis d'accord. Les points devraient probablement être remplacés par des classes de caractères niées (par exemple [^ ~]). –

+0

Vous avez tous les deux totalement raison, les classes de caractères niés serait beaucoup mieux. – kristina

0

Si vous voulez que tout arbitraire:

RewriteRule ^/(\w+)~(\w+)~(\w+)\.htm$ $1?$2=$3 [L] 

\w est égal à [A-Za-z0-9_]. Et si vous souhaitez utiliser cette règle dans un fichier .htaccess, supprimez le / principal du motif.