我接管了一个在ColdFusion 10中使用CF Wheels构建的应用程序,它被设计为在Linux上运行。它使用Tuckey URL Rewrite过滤器来清理URL。我试图在Windows机器上进行设置并使用ColdFusion 11,但我遇到了Tuckey URL Rewrite过滤器的问题。
问题是它切断了m
文件扩展名中的cfm
,因此ColdFusion会抛出File Not Found错误,因为当然没有" rewrite.cf"文件。我还在调试输出中注意到CGI.PATH_TRANSLATED变量以rewrite.cf
结尾,CGI.PATH_INFO以" m / [无论目录路径]"结束。所以过滤器正在以某种方式切断它应该重写的文件名。这似乎只发生在我使用"反向引用"在"到"重写URL的一部分,用于将目录路径传递给rewrite.cfm
。如果我只是重定向到一个普通的cfm,而不进行反向引用,它工作正常。
其他测试重写规则也可以正常工作,重写状态在我的localhost上看起来很好。有人有主意吗?
以下是我urlrewrite.xml
的规则以及混乱的PATH_TRANSLATED和PATH_INFO变量的屏幕截图。除了转移到Windows和CF 11之外,另一个不同之处是我在wwwroot(" portal")的子目录中运行应用程序,但是我已经在wwwroot级别应用了过滤器和规则并指定了重写规则中的目录。
<rule>
<note>Apply CFWheels URL rewriting for portal.</note>
<condition type="request-uri" operator="notequal">^/portal/$</condition>
<condition type="request-uri" operator="notequal">^/portal/favicon.ico$</condition>
<condition type="request-uri" operator="notequal">^/portal/cfide(.*)$</condition>
<condition type="request-uri" operator="notequal">^/portal/images(.*)$</condition>
<condition type="request-uri" operator="notequal">^/portal/javascripts(.*)$</condition>
<condition type="request-uri" operator="notequal">^/portal/stylesheets(.*)$</condition>
<condition type="request-uri" operator="notequal">^/portal/rewrite.cfm(.*)$</condition>
<from>^/portal/(.*)$</from>
<to type="passthrough" last="true">/portal/rewrite.cfm/$1</to>
</rule>