2

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

4

1 回答 1

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 路由来判断要执行哪个控制器(如果不明显)。

这也通过将Subsystem Name 的旁边:重写为 来从 url 结构中删除。/:

于 2020-05-19T16:21:22.443 回答