2009-07-07 92 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]