问题标签 [rewritepath]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1189 浏览

asp.net - Web.config 客户端缓存设置不适用于通过 HttpContext.RewritePath 路径重写

我们正在使用隐藏的内部站点系统。对于隐藏路径,我们使用 HttpContext.RewritePath。还有一个上传照片的系统,生成新的名字,照片没有机会改变。我们想为这些照片使用客户端缓存。

现场网址,用户可见:/files/autoupload/1/13/wufkjqr31028.jpg.[ps].jpg

服务器上 HttpContext.RewritePath 之后的 URL:/_sites/_shared/files/autoupload/1/13/wufkjqr31028.jpg.[ps].jpg

“/_sites/_shared/files”文件夹中有 web.config 和客户端缓存设置:

如果请求“/files/autoupload/1/13/wufkjqr31028.jpg.[ps].jpg” url,则此设置根本不适用。响应中没有 Cache-Control 标头。

如果请求完整的 url "/_sites/_shared/files/autoupload/1/13/wufkjqr31028.jpg.[ps].jpg" 并且我们的 HttpContext.RewritePath 跳过它,则缓存设置有效。

但是,如果我使用相同的 web.config 在根目录中创建“/files”文件夹,缓存设置将开始使用原始的“/files/autoupload/1/13/wufkjqr31028.jpg.[ps].jpg”url。

因此 web.config 客户端缓存设置仅适用于最初请求的磁盘路径,不适用于重写路径。

除了在 r​​oot 中创建文件夹之外,还有什么方法可以解决这个问题?

0 投票
1 回答
2013 浏览

asp.net - 当原始 URL 包含查询字符串时,ASP.Net Context.RewritePath 不起作用

我正在编写 IHttpModule 以允许对我们的详细信息页面之一进行友好的 URL 访问。当用户尝试使用http://xyx.com/hotels/123/hotel-name.aspx页面访问详细信息页面时,将在 IHttpModule 的 OnBeginRequest 方法中应用重写规则。

在这里,我使用 Context.RewritePath("~/DetailPages/DetailPage.aspx", "", "Code=123") 将路径更改为“~/DetailPages/DetailPage.aspx”,其中 123 是取自原始 URL 的代码.

现在,如果原始 URL 不包含任何查询字符串,则会调用详细信息页面。但是当用户尝试访问http://xyz.com/hotels/123/hotel-name.aspx?show=advance时,重写代码将被执行为Context.RewritePath("~/DetailPages/DetailPage.aspx", "", "Code=123&show=advance"). 在这里,我们收到一条错误消息,提示“/hotels/123/hotel-name.aspx”页面不存在。

在调用“ Context.RewritePath”方法之前和之后,我从Context.Request下面给出的对象中获取了详细信息。如果原始 URL 中没有查询字符串,两者看起来都很完美且相同。但是,当原始 URL 包含查询字符串时,在“Context_Error”(侦听此请求执行的任何错误的事件)方法中,当获取时Server.GetLastError()说“/hotels/123/hotel-name.aspx”页面不存在。

请参阅以下来自Context.Request对象的跟踪详细信息。欢迎您的帮助/输入,因为我已经花了 8 小时没有任何积极的结果。

--------------------------------------- 之前 - RewritePath 调用 ------------------- --------

RawUrl : - /Hotels/123/hotel-name.aspx?a=b

AppRelativeCurrentExecutionFilePath : - ~/Hotels/123/hotel-name.aspx

CurrentExecutionFilePath : - /Hotels/123/hotel-name.aspx

参数:-a=b&__utma=221736730.1213284380.1356606190.1356674469.1356687004.4.....(Windows+NT+5.1%3b+rv%3a7.0.1)+Gecko%2f20100101+Firefox%2f7.0.1

路径: - /Hotels/123/hotel-name.aspx

物理路径:- D:\AppRoot\Hotels\161\hotel-name.aspx

网址:- http://xyz.com/Hotels/123/hotel-name.aspx?a=b

--------------------------------------- 之后 - RewritePath 调用 ------------------- --------

RawUrl : - /Hotels/123/hotel-name.aspx?a=b

AppRelativeCurrentExecutionFilePath : - ~/DetailPages/DetailPage.aspx

CurrentExecutionFilePath : - /DetailPages/DetailPage.aspx

参数:-代码=123&a=b&__utma=221736730.1213284380.1356606190.1356674469.1356687004.4.....(Windows+NT+5.1%3b+rv%3a7.0.1)+Gecko%2f20100101+Firefox%2f7.0.1

路径: - /DetailPages/DetailPage.aspx

物理路径:- D:\AppRoot\DetailPages\DetailPage.aspx

网址:- http://xyz.com/DetailPages/DetailPage.aspx?Code=123&a=b

--- Server.GetLastError- Trace - 内部 IHttpModule 的错误事件--

RawUrl : - /Hotels/123/hotel-name.aspx?a=b

AppRelativeCurrentExecutionFilePath : - ~/Hotels/123/hotel-name.aspx

CurrentExecutionFilePath : - /Hotels/123/hotel-name.aspx

参数:-a=b&__utma=221736730.1213284380.1356606190.1356674469.1356687004.4....(Windows+NT+5.1%3b+rv%3a7.0.1)+Gecko%2f20100101+Firefox%2f7.0.1

路径: - /Hotels/123/hotel-name.aspx

物理路径:- D:\AppRoot\Hotels\161\hotel-name.aspx

网址:- http://xyz.com/Hotels/123/hotel-name.aspx?a=b

错误消息 文件“/Hotels/123/hotel-name.aspx”不存在。

堆栈跟踪

谁能找出可能是什么问题?

提前致谢。

0 投票
1 回答
1547 浏览

url-rewriting - 如何使用 ASP.NET 3.5 从域名 URL 中删除/隐藏默认页面(default.aspx 或 index.aspx)

我的要求是我们的 SEO 专家建议 www.example.com/index.aspx
应加载为 www.example.com 以用于谷歌索引规范问题

我还想提一下,因为共享服务器我们无法访问 IIS 服务器,而且支持的人也不太合作。

我在 global.asax 中尝试了以下代码。Index.aspx 是该站点的默认页面,因此它会引发错误:“500 - 内部服务器错误”。