Isapi Rewrite 301 重定向解析为 404 - 循环引用?

Posted

技术标签:

【中文标题】Isapi Rewrite 301 重定向解析为 404 - 循环引用?【英文标题】:Isapi Rewrite 301 redirect resolves as 404 - circular reference? 【发布时间】:2010-11-06 03:04:15 【问题描述】:

我正在尝试使用 IIS Isapi Rewrite 来执行以下操作...

我需要将 seo 友好的 URL(静默)转换回应用程序友好的 URL,如下所示:

RewriteRule ^/seo-friendly-url/ /test/index.cfm [I,L]

足够简单。

但我还需要已经在搜索引擎中索引的 URL(例如)被 301 重定向到对 seo 友好的版本。像这样:

RewriteRule ^/test/index.cfm    /seo-friendly-url/ [I,R=301]

这些中的每一个都可以单独工作。但是,当我的 .ini 文件中都有这两个文件时,我的浏览器地址栏中会显示 /seo-friendly-url/,但我得到的是 404。(是的,/test/index.cfm 肯定存在!)

我知道它看起来像一个循环引用,但第一条规则只重写 IIS 和应用程序之间的 URL - 没有重定向,所以我没有第二次点击 Isapi Rewrite。还是我错了?

我在 Isapi Rewrite 上启用了日志记录,我看到以下内容:

HttpFilterProc SF_NOTIFY_PREPROC_HEADERS
DoRewrites
New Url: '/seo-friendly-url/'
ApplyRules (depth=0)
Rule 1 : 1
Result (length 15): /test/index.cfm
ApplyRules (depth=1)
Rule 1 : -1
Rule 2 : 1
Result (length 18): /seo-friendly-url/
ApplyRules: returning 301
ApplyRules: returning 1
Rewrite Url to: '/seo-friendly-url/'

有人有什么想法吗?

【问题讨论】:

【参考方案1】:

你在这里有两个不同的重写,如果你做得对,它应该可以工作

    客户端用户代理永远不会看到第一个。它请求 /seo 友好,你在内部重写它并响应

    第二个并不是真正的重写,而是重定向。您将其发送回客户端并重新请求 /seo-friendly -- 我认为您需要使用 [R=301,L] 来表示这是行尾 -- 只需返回它(L 确实那个)

【讨论】:

根据文档,不需要 L -“重定向规则始终是最后一条规则。”。我还是用 L 试了一下,结果是一样的 对不起,我把它误读为 Apache 的 mod_rewrite。我在 mod_rewrite 的 .htaccess 中有类似的东西,它工作正常——有点像一个错误。【参考方案2】:

经过反复试验,我想出了一个解决方案。

使用 $ 符号指定重定向匹配在字符串的末尾:

RewriteRule ^/test/index.cfm$    /seo-friendly-url/ [I,R=301]

使重写的 URL 与重定向匹配字符串有细微的不同 - 在这种情况下添加一个不必要的“?”:

RewriteRule ^/seo-friendly-url/ /test/index.cfm? [I,L]

【讨论】:

以上是关于Isapi Rewrite 301 重定向解析为 404 - 循环引用?的主要内容,如果未能解决你的问题,请参考以下文章

板邓:wordpress如何使用wp_rewrite实现自定义伪静态,非301重定向。

tomcat 或者 jsp 怎么实现301重定向

如何在 nginx 服务器上做 301 重定向

如何执行从 index.htm 到 root 的简单 301 重定向?

高分求301重定向的htaccess规则写法

Apache 网站301重定向