2011-10-31 72 views
4

我正在努力修复我的所有网址,使其与301重定向更短。我已经解决了几乎所有的问题,但是以.cfm结尾的网址不会重写。htaccess重写规则不适用于以.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 
+0

显示您正在尝试的两个链接。这就是'html'链接传递和'cfm'链接失败的原因。 –

+0

我已经添加了如何更改链接以使其正常工作。只要看看网址的结尾。 – dadtothebone

+0

你的正则表达式比较宽松。我认为这是你的根本原因。你正在捕获数字的一切吗? –

回答

0

首先,变化你的RewriteRule的第一部分是以下,更简洁的表达式:

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

我相信独自一人解决问题。然而,如果没有,你不在乎对URL的其余部分,请尝试以下操作:

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

注:这个删除锚点($),因此允许网址开放式。

+0

如果请求的网址以'.cfm'之外的任何内容结束,那么您的重写确实很好,我认为这与该规则没有任何关系。 –

+0

@Kevin B,你注意到这一定是由别的东西引起的。我提供的规则*应该*起作用。 –

2

问题是,在Apache查看.htaccess之前,Apache httpd将它传递给Tomcat。为了测试这个,把你的重写规则移到你的虚拟主机中。如果他们工作,那就是问题所在。

+1

是的,我们已经缩小到这个问题。是否有另一种方法可以在不修改每次重写的服务器文件的情况下完成此操作? – dadtothebone

+0

约旦迈克尔在Railo社区正在研究一个名为mod_cfml的本地连接器 - 他认为这一点我相信 - 请继续关注Railo邮件列表。否则,我不太确定你是如何解决这个问题的,因为它是apache中的mod_jk/ajp/timing问题。 – webRat