我正在尝试使用子系统使用FW / 1在ColdFusion中设置API站点。我想设置路由以省略index.cfm并使用/ subsystem / action / item作为默认路径,但我不确定是否有办法执行此操作。文档不是很清楚,从我能找到的内容和其他问题已经很久了。
现在,我在Application.cfc中有以下内容......
variables.framework = {
trace = false,
reloadApplicationOnEveryRequest = "true",
home = "main.default",
diComponent = "framework.ioc",
diLocations = "/model,/controllers",
SESOmitIndex = true
};
variables.framework.routes = [
{ "$GET/accounts:member/membercount" = "/account/member/membercount" }
];
这导致IIS中出现404错误。有什么建议吗?
更新:我确实发现我需要更新IIS以包含URL重写以省略index.cfm,但是,当我尝试呼叫http://example.com/account/member/membercount
时,我仍然得到404如果我将URL更改为http://example.com/account:member/membercount我收到IIS错误,“从客户端检测到一个潜在危险的Request.Path值(:)”。
我更愿意以第一种方式调用URL,使用“/”而不是“:”,但我不知道该怎么做。似乎路线应该能够处理这个问题,但到目前为止我还没有找到办法。
答案 0 :(得分:0)
这很晚了,但是:
似乎您正在尝试使用搜索引擎友好的URL。您的generateSES = true
中需要这个variables.framework
。
您不需要这个:
variables.framework.routes = [
{ "$GET/accounts:member/membercount" = "/account/member/membercount" }
];
通过使用generateSES
选项可以使这一点变得显而易见。
然后将其放在根文件夹的web.config
文件中
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Rewrite for accounts">
<match url="^accounts/(.*)" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/accounts:{R:1}" />
</rule>
<rule name="RewriteUserFriendlyURL1">
<match url="(.*)" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.cfm/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
这告诉IIS处理根文件夹中带有index.cfm文件的所有URL(从URL中省略index.cfm)。现在,您可以使用FW1路由来判断不明显的控制器。
这还通过将子系统名称旁边的:
重写为/
来从URL结构中删除:
。