2012-04-16 64 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