IIS重写.html URL到ColdFusion - 如何获取查询字符串?
问题描述:
我正在接管一个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处理程序,但没有运气。
答
这不起作用的原因是因为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/。他们非常方便书签。
我希望有帮助。
不错的加法@亚当谢谢。 – baynezy 2012-04-16 08:11:27
这样做 - 谢谢。 – jeffkolez 2012-04-16 14:20:39