子系统,路由和SES的FW / 1

时间:2018-02-19 13:45:49

标签: routing frameworks cfml subsystem

我正在尝试使用子系统使用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,使用“/”而不是“:”,但我不知道该怎么做。似乎路线应该能够处理这个问题,但到目前为止我还没有找到办法。

1 个答案:

答案 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结构中删除: