4

我目前正在使用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 会话机制是否使这种行为成为不可能?

感谢您的时间和帮助。

4

1 回答 1

1

无 Cookie 会话只是将会话 ID 放在 URL 中,而不是放入会话 cookie。因此,您的 URLRewriter.NET 的 URL 映射需要考虑这种行为。你在做这个吗?如果您希望能够在有或没有 cookie 的情况下运行,我希望您有匹配 cookie 和无 cookie URL 模式的规则。

于 2009-07-23T22:26:14.307 回答