3

我正在尝试使用 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/'

有人有什么想法吗?

4

2 回答 2

0

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

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

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

于 2009-06-26T12:08:39.290 回答
0

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

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

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

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

RewriteRule ^/seo-friendly-url/ /test/index.cfm? [I,L]
于 2009-06-30T09:35:33.957 回答