2010-10-13 4 views
0

J'ai cette url: http://localhost/zina/Artist%20One%20Demo?l=8&m=10&c Et il doit devenir: http://localhost/?p=Artist%20One%20Demol=8&m=10&c&option=com_zina&Itemid=82Besoin d'aide avec RewriteRule Regex

J'utilise ceci pour réécrire l'URL:

RewriteRule ^zina/(.*)?(.*)$ /?p=$1&$2&option=com_zina&Itemid=82 [L,R] 

Cependant, je me retrouve avec urls que ressembler à ceci: http://localhost/?p=Artist%20One%20Demo/Title%20One&&option=com_zina&Itemid=82

En d'autres termes, $ 2 ne correspond à rien. Quelqu'un peut-il me dire pourquoi?

Répondre

1

? est un caractère spécial (sélectionne 0 ou 1 du modèle précédent), .* est gourmand (correspondra aussi loin qu'il peut aller, jusqu'à la fin, donc 2 $ sera toujours vide $ 1 mange tout jusqu'à la fin de la ligne.

la chaîne de requête n'est pas dans la chaîne du RewriteRule correspond contre, et la vérification des modèles dans la chaîne de requête normalement fait avec RewriteCond %{QUERY_STRING} pattern avant une RewriteRule:

Cependant, on n'a pas besoin de se mêler avec regexes pour obtenir la chaîne de requête dans l'URL: « ? »

RewriteRule ^zina/(.*)$ /?p=$1&option=com_zina&Itemid=82 [L,R,QSA] 
0

Ceci est hors de la manchette et non testé, mais il semble que vous n'échappez pas votre? dans la réécriture regex afin qu'il le traite littéralement.

Essayez ceci peut-être

RewriteRule ^zina/(.*)\?(.*)$ /?p=$1&$2&option=com_zina&Itemid=82 [L,R] 
+0

RewriteRule ne fonctionne pas du tout si j'échapper la – Malfist