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

时间:2009-06-26 11:40:13

标签: seo http-status-code-404 http-status-code-301 isapi-rewrite

我正在尝试使用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肯定存在!)< / p>

我知道它看起来像一个循环引用,但第一条规则只重写了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/'

有人有任何想法吗?

2 个答案:

答案 0 :(得分:0)

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

  1. 客户端用户代理从未见过第一个。它请求/ seo友好,你在内部重写它并回复

  2. 第二个不是重写,而是重定向。你把它发送回客户端并重新请求/ seo友好 - 我认为你需要使用[R = 301,L]来说这是行的结束 - 只需返回它(L确实如此)那)

答案 1 :(得分:0)

通过一些试验和错误,我想出了一个解决方案。

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

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

使重写的网址与重定向匹配字符串完全不同 - 在这种情况下添加不必要的“?”:

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