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重定向。