301redirect和URL重写,以减less带有查询参数的URL

好的,所以我在我的服务器上设置了URL重写(IIS 7),例如,

http://example.org/p/1234/ 

是真的

 http://example.org/product/?product_id=1234 

(使用/ product /包含能够处理查询参数的Web应用程序的索引文件)。

问题是,我想现在每个人都使用/p/1234/ url,所以我想每当有人访问/product/?product_id=1234 url时发送301redirect, 据我所知当发生URL重写时,就服务器而言,用户确实去了/product/?product_id=1234

虽然在浏览器的URL栏中可能会说http://example.org/p/1234/ ,当我做一个标题和CGIvariables的转储时, /p/1234/不会显示在任何variables中。

我想我的担心是,即使我能做到这一点,似乎也会让一个简单的请求变得相当复杂:

  1. 转到/p/1234/
  2. 将其重写为/product/?product_id=1234
  3. 原来是/p/1234/ ? (
  4. 没做什么。

否则:

  1. 转到/product/?product_id=1234
  2. 原来是/p/1234/ ? (
  3. 301redirect到/p/1234/
  4. 将其重写为/product/?product_id=1234
  5. 原来是/p/1234/ ? (
  6. 没做什么。

我知道,最终一些search索引将消除旧的URL赞成301redirect指定的那些,但在那之前,似乎有很多的服务器开销。

另外,如果我确实设置了,是否有一个filter,我可以在IIS中使用这样做,或者我需要将逻辑添加到我的webapp?

请注意,我为所有这些网页设置了<link rel="canonical".../> ,但是我仍然看到旧格式显示在search结果中。