好的,我已在服务器 (IIS 7) 上设置了 URL 重写,例如,
http://example.org/p/1234/
是真的
http://example.org/product/?product_id=1234
(/product/ 包含能够处理查询参数的 Web 应用程序的索引文件)。
问题是,我想要每个人现在使用这些/p/1234/
网址,所以我想在有人访问时发送 301 重定向老的的网址/product/?product_id=1234
,但据我所知,当 URL 重写发生时,就服务器而言,用户做过去/product/?product_id=1234
。
尽管在浏览器的 URL 栏中可能会显示http://example.org/p/1234/
,但当我转储标头和 CGI 变量时,/p/1234/
它不会显示在任何的变量。
我猜我担心的是,即使我能做到这一点,它似乎也会使一个简单的请求变得相当复杂:
- 去
/p/1234/
- 重写为
/product/?product_id=1234
- 原本是嗎
/p/1234/
?(是的) - 没做什么。
否则:
- 去
/product/?product_id=1234
- 原本是嗎
/p/1234/
?(不) - 301 重定向至
/p/1234/
- 重写为
/product/?product_id=1234
- 原本是嗎
/p/1234/
?(是的) - 没做什么。
我知道最终一些搜索索引将会消除旧的 URL,转而采用 301 重定向指定的 URL,但在此之前,这似乎会给服务器带来很大的开销。
另外,如果我确实设置了这一点,是否有一个我可以在 IIS 中使用的过滤器来执行此操作,或者我是否需要将逻辑添加到我的 web 应用程序中?
请注意,我已经为所有这些网页进行了设置<link rel="canonical".../>
,但我仍然看到旧格式出现在搜索结果中。