2012-04-16 99 views
0

我正在接管一個ColdFusion應用程序,並且在重寫時遇到了一些問題。IIS重寫.html URL到ColdFusion - 如何獲取查詢字符串?

該站點位於IIS7/CF9.0.1/SQL Server堆棧上。 Helicon經理正在處理重寫。

大多數網址寫入HTML文件,所以我們不得不像/profile.html

的URL獲得此行改寫:

​​

時有發生的問題像/view.html?id=123這樣的查詢字符串。查詢字符串應該由$ 4個可變寫的,但我從來沒有得到在應用任何東西,當我轉儲URL像這樣:

<cfset objRequest = GetPageContext().GetRequest() /> 
<cfset strUrl = objRequest.GetRequestUrl().Append(
"?" & objRequest.GetQueryString() 
).ToString() 
/> 
<cfoutput>#strUrl#</cfoutput> 

我得到的是這樣的:http://10.211.55.6/default.cfm?name=view.html&。查詢字符串從不顯示。

我相信這是一個IIS設置 - 允許.html處理程序訪問GET變量也許?我建立了一個.html處理程序,但沒有運氣。

回答

3

這不起作用的原因是因爲RewriteRule從來沒有看到查詢字符串,只有資源的路徑。要訪問查詢字符串,你需要使用一個重寫條件

RewriteEngine on 
RewriteBase/

RewriteCond %{QUERY_STRING}   ^(.*)$ 
RewriteRule ^([^\.]+)\.html$   default.cfm?name=$1.html&%1 [NC,L] 

在這個例子中,我們只是檢查查詢字符串,並使用%1這意味着第一組從RewriteCond這是矯枉過正你的榜樣,你不要」噸需要匹配任何所以你可以做這樣的: -

RewriteEngine on 
RewriteBase/

RewriteRule ^([^\.]+)\.html$   default.cfm?name=$1.html&%{QUERY_STRING} [NC,L] 

然而,聰明的方法就是使用正確的標誌,做你想做的事是QSA這意味着查詢字符串追加像這樣什麼: -

RewriteEngine on 
RewriteBase/

RewriteRule ^([^\.]+)\.html$   default.cfm?name=$1.html [NC,QSA,L] 

Helicon的ISAPI重寫的所有文檔可以在這裏找到:http://www.helicontech.com/isapi_rewrite/doc/。他們非常方便書籤。

我希望有幫助。

+0

不錯的加法@亞當謝謝。 – baynezy 2012-04-16 08:11:27

+0

這樣做 - 謝謝。 – jeffkolez 2012-04-16 14:20:39