【问题标题】:Coldfusion IIS RewriteColdfusion IIS 重写
【发布时间】:2018-01-25 00:04:58
【问题描述】:

我正在尝试像这样映射一个 URL:

www.domain.com/some-page.cfm?coid=1

像这样对用户更友好:

www.domain.com/some-page/company-name

www.domain.com/company-name

我已经反复尝试在 IIS 中使用 URL 重写,但终其一生都无法让它发挥作用。

任何帮助将不胜感激!

【问题讨论】:

  • 你试过什么?你的web.config 是什么样的?

标签: iis url-rewriting coldfusion


【解决方案1】:

我认为您实际上可能想做相反的事情...使用 IIS 将 /abc.htm 请求映射到 /?id=abc,对吗? (对于您要求的规则,我建议使用 ColdFusion 编写。)

这是一个 IIS 规则,我们使用它是为了不在我们的博客 URL 中公开“.cfm”。 URL 中“/blog/”之后的任何 URL 参数都可作为 URL.WebPath 用于 ColdFusion。保留了其他 URL 参数。如果您对此进行修改,我建议匹配 URL 模式(如“blog/”或“/detail-”),以便仅重写指定的 URL。

<rewrite>
  <rules>
    <rule name="CFMBlog" patternSyntax="ECMAScript" stopProcessing="true">
      <match url="blog/(.*.htm)$" ignoreCase="true" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{SCRIPT_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{PATH_INFO}" pattern="^.*(blog/index.cfm/).*$" negate="true" />
      </conditions>
      <action type="Rewrite" url="/blog/index.cfm?WebPath={R:0}" appendQueryString="true" />
    </rule>
  </rules>
</rewrite>

在 ColdFusion 方面,您需要分析 URL 并确保其格式正确。您不希望两个版本的 URL 都响应,因为担心 SEO 重复(除非您设置 URL 规范化)。根据我的经验,最好将 301 永久重定向服务到 URL 的小写、破折号分隔的“.htm”版本。

在您的 CFM 页面中,您需要添加一些逻辑来检查 .htm 是否在 path_info 中,URL.COID 是否存在于原始请求中而 URL.webpath 不存在。根据您的情况,您可以执行 301 重定向到 URL 的 HTM 版本,以便搜索引擎和用户都知道新的 URL。

【讨论】:

    【解决方案2】:

    你看过这个吗? IIS URL Rewrite not working with query string

    或者,如果您想在没有 IIS 的情况下使用纯 ColdFusion 来执行此操作,该怎么做?

    一些页面.cfm

    <!--- Test for query string params --->
    <cfif StructKeyExists(url, "coid") and url.coid eq 1>
        <cflocation url="/some-page/company-name" addtoken="no">
    <cfelse>
        <!--- Other processing here... --->
    </cfif>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 2013-07-01
      相关资源
      最近更新 更多