【发布时间】:2013-09-16 22:39:40
【问题描述】:
我在安装了 URL 重写模块的 IIS 7.5 上运行 CF10。 所有重写规则都运行良好,ColdFusion 正在返回正确的页面。为了让页面显示在浏览器中,我必须像这样在 Application.cfc 中手动设置“内容长度”值:
<cfcomponent>
<cffunction name="onRequestEnd">
<cfheader name="Content-Length" value="#getPageContext().getCFOutput().getBuffer().size()#" />
</cffunction>
</cfcomponent>
如果没有此代码,浏览器将不会显示该页面。但是,即使它现在正在显示页面,但它并没有正确执行。页面从未完全加载完毕,而且页面上似乎并非所有 HTML 内容。
我尝试在设置“内容长度”后添加一个<cfflush /> 标记,但没有区别。我不明白为什么会发生这种情况,但我知道使用 htaccess 的其他人发生了这种情况:http://forums.devshed.com/coldfusion-development-84/page-not-finishing -loading-coldfusion-and-htaccess-bug-575906.html
编辑:出站/入站规则定义示例:
<!--- Outbound rule --->
<rule name="Rewrite Info Page" preCondition="IsHTML" enabled="false" stopProcessing="false">
<match filterByTags="A" pattern="^(.*)/info\.cfm\?subjectid=([^=&]+)&(?:amp;)?nameid=([^=&]+)$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
</conditions>
<action type="Rewrite" value="{R:1}/info/{R:2}/{R:3}" />
</rule>
<preConditions>
<preCondition name="IsHTML">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
<!--- Inbound rule --->
<rule name="Rewrite Info Page" enabled="true" stopProcessing="false">
<match url="^(.*)/info/([^/]+)/([^/]+)/?$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="{R:1}/info.cfm?subjectid={R:2}&nameid={R:3}" appendQueryString="true" />
</rule>
出站规则是查看<a> 标记内的 URL 链接,看起来像 http://mysite.com/info.cfm?subjectid=1&nameid=1,然后将其重写为在我的页面上显示为 http://mysite.com/info/1/1。
Inbound 正在寻找一个看起来像 http://mysite/info/1/1 的链接并将其解析/重写为真实的 URL,即 http://mysite.com/info.cfm?subjectid=1&nameid=1
【问题讨论】:
-
我怀疑它是重写模块,但为了排除故障,将其关闭并通过不受干扰的 URL 访问页面。相同的?任何页面都一样吗?查看一些 CF 监控并检查 CF 是否认为它已经完成了对请求的处理,或者它是否没有释放它。重新安装 Web 服务器连接器,看看是否有帮助。
-
嗨亚当,我已经这样做了,当重写模块关闭时没有问题。因此它与 IIS 重写模块有关。我现在正在尝试使用 apache mod_rewrite 的 helicon ape,看看我是否可以让它工作
-
原来 mod_rewrite 不能即时更改 HTML 内容 :( 这意味着我的所有 URL 都必须在我的 CF 代码中重写为友好 URL。这在检查时会让人头疼用于孤立/损坏的链接。
-
打开浏览器开发工具(Firebug 或类似工具)并在页面加载时观察网络流量。您的任何链接资产是否返回任何 404 或其他 HTTP 错误代码?将文件从
/path/file.cfm重写为/path/file/会破坏代码中的相对路径引用,导致 CSS、图像和 JavaScript 根本无法工作。 -
完全没有 404 错误。标题看起来也不错。但是浏览器会继续显示一个旋转的图标,等待页面加载。我注意到有时并非所有的 HTML 都会输出到浏览器,当 Outbound 打开时,Firebug 会以缓慢的响应时间返回。我很确定出站链接重写花费的时间太长(我的页面上有很多链接),这导致 ColdFusion 不正常地返回页面。这就是为什么我必须手动设置 content-length 标头,以便页面即使在加载问题的情况下也能显示在浏览器中。
标签: coldfusion iis-7.5 coldfusion-10 url-rewrite-module