0

我正在 ColdFusion 10 中开发一个新站点,并使用 .htaccess 文件进行一些 url 重写。当我在没有其他包含的情况下调用它们时,我有三个非常有效的规则。当我将它们包装在包含中时,我得到一个错误。

这是我的规则:

RewriteEngine on
RewriteRule ^advertise$ /index.cfm?Section=Advertise
RewriteRule ^bike/([0-9]+)/([0-9]+)/ /index.cfm?Section=Bike&BikeID=$1&FeatureID=$2
RewriteRule ^bike/([0-9]+)/ /index.cfm?Section=Bike&BikeID=$1

索引页显示我们要显示和调用的部分包括围绕页眉和页脚的适当文件,如下所示:

include "header.cfm"; 
include "#VARIABLES.Section#.cfm";
include "footer.cfm";

问题是,它不适用于“自行车”页面,即后两条规则。似乎头文件被多次包含,这使得指向 CSS 和其他文件的链接不好,从而弄乱了页面。如果我注释掉包含的页眉和页脚,一切正常,但没有页眉或页脚,这不是我想要的。

// include "header.cfm"; 
include "#VARIABLES.Section#.cfm";
// include "footer.cfm";

url 重写规则中是否存在导致自行车页面加载多次然后失败的内容?

http://flyingpiston2012-com.securec37.ezhostingserver.com/

您可以在此处尝试该页面并通过单击链接查看问题。有想法该怎么解决这个吗?

更新

当我通过包含整个 URL 使所有链接成为绝对链接时,问题就消失了。

<cfoutput>
<link href="#APP.Home#/bootstrap/css/bootstrap.css" rel="stylesheet">
</cfoutput>

不过,我不应该包含文件的绝对路径。关于为什么这对我不起作用的任何提示?

更新

// THIS FIXES THE PROBLEM
<base href="#APP.Home#/">
<link href="/bootstrap/css/bootstrap.css" rel="stylesheet">

// THIS FIXES THE PROBLEM
<link href="#APP.Home#/bootstrap/css/bootstrap.css" rel="stylesheet">

// THIS IS THE PROBLEM
<link href="/bootstrap/css/bootstrap.css" rel="stylesheet">
4

3 回答 3

3

无论您的问题是什么,尝试在 .htaccess 重写规则和 CF 包含的文件之间建立连接都是错误的故障排除方法。

重写规则仅适用于传入请求:浏览器地址栏中(例如)中请求的文档。

当一个文件包含一个文件时,它不会发出请求,因此不涉及网络服务器(以及相应的重写模块)。

我想如果您只是浏览到自行车页面的重写 URL(例如:/index.cfm?Section-Bije&BikeID=12345),您会看到同样的问题。这表明重写不是问题的一部分。

将此概念排除在您的调查之外,只需查看您的文件是如何包含的。一个很好的简单起点是打开调试,然后使用 TREE 视图查看执行时间显示。这将使您了解您在模板中多次调用的位置/方式/原因。

于 2012-06-18T07:59:23.040 回答
2

这可能是因为您没有告诉 Apache 在匹配时停止解析。尝试使规则看起来像这样:

RewriteRule ^advertise$ /index.cfm?Section=Advertise [L]
RewriteRule ^bike/([0-9]+)/([0-9]+)/ /index.cfm?Section=Bike&BikeID=$1&FeatureID=$2 [L]
RewriteRule ^bike/([0-9]+)/ /index.cfm?Section=Bike&BikeID=$1 [L]
于 2012-06-18T06:32:07.430 回答
1

我不知道它是否相关,但我确实遇到了与 FW/1 类似的问题。通过跟踪 rewrite.log,我可以看到cfinclude实际上不存在的所有内容实际上都在通过 Apache。我添加[NS]到 .htaccess 并且它消失了:

# rewrite rules, NS skips rewrite rule for internal sub-requests
# for FW/1, removes index.cfm from the URL
RewriteRule ^(.*)$ /index.cfm/$1 [NS,L]
于 2012-06-18T14:46:11.320 回答