Apache htaccess重写规则无法处理以.cfm结尾的URL

Apache htaccess重写规则无法处理以.cfm结尾的URL,apache,.htaccess,mod-rewrite,redirect,railo,Apache,.htaccess,Mod Rewrite,Redirect,Railo,我正在努力修复我所有的URL的301重定向更短。我已经修复了几乎所有的问题,但是有一个url以.cfm结尾,不会重写 FROM: http://www.mydomain.com/index.cfm/catlink/17/pagelink/7/sublink/34/art/41/rec/1/page.cfm TO: http://www.mydomain.com/story/resources/health/page/168/page.html 如果我将/page.cfm更改为/page.ht

我正在努力修复我所有的URL的301重定向更短。我已经修复了几乎所有的问题,但是有一个url以.cfm结尾,不会重写

FROM: http://www.mydomain.com/index.cfm/catlink/17/pagelink/7/sublink/34/art/41/rec/1/page.cfm

TO: http://www.mydomain.com/story/resources/health/page/168/page.html
如果我将
/page.cfm
更改为
/page.html
,则重写将起作用

以下是适用于我的其他URL的重写规则

RewriteRule ^index.cfm/catlink/([a-zA-Z0-9/-]+)([/])pagelink/([a-zA-Z0-9/-]+)([/])sublink/([a-zA-Z0-9/-]+)([/])art/([a-zA-Z0-9/-]+)(.*)$ 

http://localhost/index.cfm?page=moved&cat=$3&subcat=$5&article=$7&story=$8 [R=301]
为什么URL以.html结尾时有效,而以.cfm结尾时无效?我做错了什么

这是当前链接,不起作用:

http://www.mydomain.com/index.cfm/catlink/17/pagelink/7/sublink/34/art/41/rec/1/page.cfm
如果我手动将其结尾更改为.html,我可以让它工作:

http://www.mydomain.com/index.cfm/catlink/17/pagelink/7/sublink/34/art/41/rec/1/page.html

首先,将重写规则的第一部分更改为以下更简洁的表达式:

^index.cfm/catlink/(\d+)/pagelink/(\d+)/sublink/(\d+)/art/(\d+)/(.*)$
我相信单靠这一点就可以解决这个问题。但是,如果没有,并且您不关心URL的其余部分,请尝试以下操作:

^index.cfm/catlink/(\d+)/pagelink/(\d+)/sublink/(\d+)/art/(\d+)/

注意:这将删除锚(
$
),因此允许URL是开放式的。

问题是Apache httpd在Apache查看.htaccess之前将其传递给Tomcat。要测试这一点,请将重写规则移动到vhost中。如果它们有效,那就是问题所在。

显示您正在尝试的两个链接。这就是
html
链接传递的内容和
cfm
链接失败的内容。我添加了如何更改链接以使其正常工作。看看URL的结尾,你的正则表达式很松散。我想这是你的根本原因。你所捕捉的一切都是数字吗?既然你提到了,我想我是。当我第一次开始学习重写的时候,这很有效,所以我没有花时间去学习如何优化它。我想我将被迫了解更多关于这方面的信息。为了回应托比,我测试了这个问题,制作了一个htaccess文件,没有其他重写,只有这一次,同样的问题也会发生。如果请求的url不是以
.cfm
结尾,你的重写效果会很好,我认为这与这个规则没有任何关系。@Kevin B,正如你所指出的,这一定是由其他原因造成的。我提供的规则应该是有效的。是的,我们已经缩小到这个问题。有没有其他方法可以在每次重写时都不修改服务器文件的情况下实现这一点?Railo社区的Jordan Michael正在开发一个名为mod_cfml的本地连接器-我相信他考虑到了这一点-请继续关注Railo邮件列表。否则,我真的不知道如何解决这个问题,因为这是apache中的mod_jk/ajp/计时问题。