Question

J'utilise ISAPI Rewrite 3 (clone mod rewrite pour IIS) et d'essayer de réécrire les URL en fonction de la chaîne de requête - et ensuite passer sur une partie de cette chaîne de requête dans la réécriture

.

Donc, si j'entre une URL comme ceci: /test/home.cfm?page=default&arbitraryExtraArg=123

Je veux que ce soit réécrite comme: /test/index.cfm?page=home&arbitraryExtraArg=123

Je la condition / règle suivante:

RewriteCond %{QUERY_STRING} ^page=default(.*)$ [I]
RewriteRule ^/test/home.cfm$ /test/index.cfm?page=home%1 [I,R=301]

Mais les variables de chaîne de requête supplémentaires ne sont jamais passés. % 1 semble être vide.

Voici comment faire référence à une correspondance de motif de la RewriteCond, non?

Qu'est-ce que je suis absent ici?

Merci!

EDIT: Il me semble que le RewriteCond est totalement ignorée. Voici ce que mon logfile ressemble à:

[snip] (2) init rewrite engine with requested uri /test/home.cfm?page=default
[snip] (1) Htaccess process request C:\Inetpub\wwwroot\dev\IsapiRewrite\httpd.conf
[snip] (3) applying pattern '^/test/home\.cfm$' to uri '/test/home.cfm'
[snip] (1) escaping /test/index.cfm?page=home 
[snip] (2) explicitly forcing redirect with http://www.devsite.com/test/index.cfm?page=home
[snip] (2) internal redirect with /test/home.cfm?page=default [INTERNAL REDIRECT]

[snip] (2) init rewrite engine with requested uri /test/index.cfm?page=home
[snip] (1) Htaccess process request C:\Inetpub\wwwroot\dev\IsapiRewrite\httpd.conf
[snip] (3) applying pattern '^/test/home\.cfm$' to uri '/test/index.cfm'

Faut-il mentionner le modèle RewriteCond contrôle là-dedans?

Était-ce utile?

La solution

  

Mais les variables de chaîne de requête supplémentaires ne sont jamais passés. % 1 semble être vide.

% 1 est vide, car, selon le journal de la demande que vous faites est /test/home.cfm?page=default -. Sans second paramètre

Le absense de traitement RewriteCond dans le journal peut être dû à une faible RewriteLogLevel.

Et la configuration doit être:

RewriteCond% {QUERY_STRING} ^ page = défaut (. +) $ [NC]

RewriteRule ^ / test / home.cfm $ /test/index.cfm?page=home%1 [NC, R = 301, L]

Autres conseils

Je pense que ISAPI Rewrite est un peu différent mod_rewrite:

  

Chaque fois que vous mettez entre parenthèses dans une expression régulière présente dans une règle complexe (une règle avec les conditions) vous Réalisant un submatch qui pourrait être utilisé dans une chaîne de format (en utilisant la syntaxe $N) ou en arrière-référence (en utilisant la syntaxe \N ) dans des conditions suivantes. Ces submathces sont globales pour toute règle complexe ( RewriteRule directive et correspondant RewriteCond directives). SubMatches sont numérotés de haut en bas et de gauche à droite en commençant par le premier RewriteCond directive (si une telle directive existe) correspondant au RewriteRule .

Donc, essayez $1 d'obtenir le match du premier groupe, peu importe où il apparaît:

RewriteCond %{QUERY_STRING} ^page=default(.*)$ [I]
RewriteRule ^/test/home\.cfm$ /test/index.cfm?page=home$1 [I,R=301]

ISAPI Rewrite 3 semble être plus compatible avec mod_rewrite d'Apache.

Je crois que cela fonctionne aussi:

RewriteRule ^/test/home.cfm\?page=default(.*)$ /test/index.cfm?page=home%1 [I,R=301]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top