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

Seo Isapi重写301重定向解析为404-循环引用?,seo,http-status-code-404,http-status-code-301,isapi-rewrite,Seo,Http Status Code 404,Http Status Code 301,Isapi Rewrite,我正在尝试使用IIS Isapi重写来执行以下操作 我需要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

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

我需要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友好的url/但我收到了404。(是的,/test/index.cfm肯定存在!)

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

我已经启用了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/'

有人有什么想法吗?

这里有两种不同的重写,如果你做对了,应该可以

  • 客户端用户代理永远看不到第一个。它请求/seo友好,您可以在内部重写它并作出响应

  • 第二个不是真正的重写,而是重定向。您将其发送回客户机,它会重新请求/seo友好型——我认为您需要使用[R=301,L]来表示这是该行的结尾——只需返回它(我这样做)


  • 经过反复试验,我想出了一个解决办法

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

    RewriteRule ^/test/index.cfm$    /seo-friendly-url/ [I,R=301]
    
    使重写的URL与重定向匹配字符串略微不同-在本例中,添加不必要的“?”:


    根据文档,不需要L-“重定向规则始终是最后一条规则”。尽管如此,我还是用L进行了尝试,结果是一样的,我把它误读为Apache的mod_重写。我的.htaccess for mod_rewrite中有这样的东西,它工作得很好——看起来有点像一个bug。
    RewriteRule ^/seo-friendly-url/ /test/index.cfm? [I,L]