IIS将.html URL重写为ColdFusion - 如何获取查询字符串?

时间:2012-04-16 02:06:58

标签: iis-7 coldfusion url-rewriting

我正在接管一个ColdFusion应用程序,我在重写方面遇到了一些麻烦。

该站点位于IIS7 / CF9.0.1 / SQL Server堆栈上。 Helicon经理正在处理重写。

大多数网址都写入html文件,所以我们有类似/profile.html

的内容

此行重写了URL:

RewriteRule /([^\?]*?)\.(html)(\??)(.*)? /default.cfm?name=$1.$2&$4 [I]

当出现像/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处理程序,但没有运气。

1 个答案:

答案 0 :(得分: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/。加入书签非常方便。

我希望有所帮助。