要点:
如果我有这两件事:
先运行什么,1还是2?
(ASP.Net版本为4.0,IIS版本为7.5)
实际案例
http://inhibitif.com/product/Hair-Free-Deodorant
此路线被映射到Product.aspx页面,其中Hair-Free-Face-Serum是产品密钥。如果此页面未找到产品密钥,则会将Page_Load事件重定向到完整产品列表。
根据网站所有者的要求(我无法控制),该特定密钥(无毛 - 除臭剂)已经改变(无毛 - 除臭 - 密 - 石灰 - 薄荷 - 50ml)。因此,对该特定产品的任何调用都会被重定向到完整的产品列表(/ products)。因为,对于SEO,最好使用新密钥重定向到新产品页面(而不是重定向到通用产品列表页面),我在IIS上添加了这个重写规则
<rule name="Old Product Key: Hair-Free-Deodorant" patternSyntax="Wildcard" stopProcessing="true">
<match url="*/product/Hair-Free-Deodorant" />
<action type="Redirect" url="/product/Hair-Free-Deodorant-Key-Lime-Mint-50ml" />
</rule>
规则永远不会触发。始终调用重定向。
注意:重写规则正在该网站上运行。例如,任何对“www.inhibitif.com”的调用都会被重写为“inhibitif.com”
答案 0 :(得分:1)
根据MSDN上“ASP.NET Application Life Cycle Overview for IIS 7.0 ”文章中的文档,我希望IIS重定向发生在Page_Load重定向之前。
请注意,为每个请求创建阶段“ Response对象。”首先发生,其中包含以下活动:
...应用程序对象,如HttpContext,HttpRequest和 HttpResponse 已创建并初始化。 ... HttpResponse对象包含发送给客户端的响应 包括所有渲染的输出和cookie。
此时,由于IIS知道响应是303重定向到特定页面,我希望它将该响应加载到Response对象中。
毕竟,“请求由HttpApplication管道处理”阶段发生,该阶段贯穿ASP.NET页面生命周期(包括Page_Load)。
实际测试这个理论会很有趣,我今天有几分钟的时间会这样做。从Response.Redirect
actually uses a 302 redirect开始,通过查看对Page1.aspx请求的响应,可以很容易地判断出来(看看你是否有303或302。
答案 1 :(得分:1)
简答:
重写规则首先运行。 模式格式不正确。
<强>详细信息:强>
重写规则格式不正确。匹配模式在开头不需要“* /”。如IIS规则列表页面所示,输入只需匹配“/'”之后的“URL路径”。
这是修改后的(工作)规则。注意我还修改了动作URL(在开头删除了“\”)虽然这似乎没有必要 - 它可以任意方式工作。匹配编辑就是诀窍:
<rule name="Old Product Key: Hair-Free-Deodorant" patternSyntax="Wildcard" stopProcessing="true">
<match url="product/Hair-Free-Deodorant" />
<action type="Redirect" url="product/Hair-Free-Deodorant-Key-Lime-Mint-50ml" />
</rule>
更改规则后,重写开始先触发(在重定向后面的代码之前)。在下面的jadarnel27的答案中查看有关它首先触发的详细信息。