2009-07-07 93 views
1

我正在使用Isapi重写3(mod重写克隆为IIS),并尝试重写基于查询字符串的URL - 然后在重写中传递该查询字符串的一部分。Isapi重写 - 访问查询字符串模式匹配RewriteRule

所以,如果我输入一个URL是这样的:/test/home.cfm?page=default & arbitraryExtraArg = 123

我想,要被改写为:/test/index.cfm?page =家庭& arbitraryExtraArg = 123

我有以下条件/规则:

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

但额外的查询字符串variabl es永远不会通过。 %1似乎是空白的。

这是如何引用来自RewriteCond的模式匹配,对吧?

缺少什么我在这里?

谢谢!

编辑:它看起来像我RewriteCond被完全忽略。这里是我的日志文件看起来像:

[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' 

如果有在那里的RewriteCond模式检查的提?

+0

但是该规则是否适用? – Gumbo 2009-07-07 14:14:47

+0

是的,确切地说。我最终在/test/index.cfm?page=home – stubotnik 2009-07-07 14:18:13

+0

那么`/test/home.cfm?page = default`的初始请求呢?或者,你是否一直在测试`/test/index.cfm?page = home`?如果是这样,您可能会误解URL重写的工作方式。他们只是重写请求的URI! – Gumbo 2009-07-07 16:34:11

回答

3

但额外的查询字符串变量从未通过。 %1似乎是空白的。没有第二个参数 - 因为根据日志您做出请求/test/home.cfm?page=default

%1是空白。

RewriteCond在日志中的处理缺失可能是由于RewriteLogLevel较低。

而配置应该是:

的RewriteCond%{QUERY_STRING} ^页=缺省(+)$ [NC]

重写规则^ /测试/ home.cfm $ /test/index.cfm ?page = home%1 [NC,R = 301,L]

0

我觉得ISAPI重写有一点不同,以mod_rewrite的:

每当你把括号中的任何正则表达式存在于复杂的规则(与条件的规则)添加标记,可以在使用的子匹配格式字符串(使用$N语法)或在后续条件中作为反向参考(使用\N语法)。这些子域对于整个复杂规则是全局的(RewriteRule指令和相应的RewriteCond指令)。从第一个RewriteCond指令(如果此指令存在)开始,子匹配从上到下和从左到右进行编号,对应于RewriteRule

所以尽量$1获得第一组的比赛,无论它出现:

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

ISAPI Rewrite 3似乎是Apache的mod_rewrite更兼容。

-1

我相信这个作品也:

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