我目前正在使用Intelligencia 的 URL Rewriter .NET HTTPModule 来重写 URL。我正在使用它的自定义转换功能,它允许我提供一个程序集,其中包含一个执行实际 URL 转换的方法。
我打开了无 cookie 会话,这对 URL 重写器造成了一些干扰。
所以,假设我的服务器上的路径是这样的:
http ://www.foobar.com/actualPath/index.aspx
但我想使用 url 重写使路径看起来像这样:
http ://www.foobar.com/rewrittenPath/index.aspx
我制作了一个脚本来输出以下内容:
-Request.Url(来自我的代码隐藏)
-Request.RawUrl(来自我的代码隐藏)-document.location
(来自javascript)
我在地址栏中输入以下内容:
http ://www.foobar.com/rewrittenPath/index.aspx
当我禁用无 cookie 会话时,一切正常。我的脚本输出以下值:
- Request.Url 显示为http://www.foobar.com/actualPath/index.aspx
- Request.RawUrl 显示为 /rewrittenPath/index.aspx
- document.location 显示为http ://www.foobar.com/rewrittenPath/index.aspx
- 地址栏中的 URL 与我最初输入的内容保持不变。
但是,当我启用无 cookie 会话时,事情就会出错。我的脚本输出以下值:
- Request.Url 显示为http://www.foobar.com/actualPath/index.aspx
- Request.RawUrl 显示为 /actualPath/index.aspx
- document.location 显示为http ://www.foobar.com/actualPath/index.aspx
- 地址栏中的 URL 不知何故被更改,因此显示为:
http ://www.foobar.com/(S(SESSIONID))/actualPath/索引.aspx
但这很奇怪——页面的 OnLoad 事件只触发一次。那么这里发生了什么?.NET 是否在执行页面重定向,但在 OnLoad 事件有机会触发之前执行此操作?
我想做的是将 rewrittenPath 保留在地址栏中。我希望 document.location 返回 rewrittenPath。我希望 Request.RawUrl 返回 rewrittenPath。无 cookie 会话可以做到这一点吗?或者.NET 的无cookie 会话机制是否使这种行为成为不可能?
感谢您的时间和帮助。