问题标签 [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 回答
615 浏览

php - 当 .NET HttpModule RewritePath 调用的目标是 PHP 文件时,$_POST 数组为空

我们有一个在 IIS 6 上运行的应用程序,它使用自定义 HttpModule 来重写 url。这很好用(我们做得很好),除非 Context.RewritePath 目标是 .php 文件。php 文件按预期执行,但是 $_POST 集合为空,这意味着它无法访问提交到重写 url 的任何表单。重写为 .aspx 文件时不存在该问题,因为 Request.Form 集合很好。

因此,我的问题有两个部分:为什么 $_POST 集合没有被填充?有没有办法确保在重写后正确填充 .php $_POST 集合?

我没有太多要展示的代码方式。有一个简单的:

一旦 HttpModule 确定了将请求发送到哪里。

编辑: 有趣的是,如果我var_dump(file_get_contents('php://input'));在 PHP 文件(这里描述的方法)中执行此操作,则会显示表单的内容。所以数据到达了 PHP 脚本,但没有到达 $_POST 数组。

0 投票
1 回答
125 浏览

asp.net - 如何访问会话以进行重写?

我正在尝试使用该HttpContext.Current.RewritePath方法为不同的客户提供不同版本的应用程序。我希望能够查看该HttpContext.Current.Session对象以了解它提出请求的人。奇怪的是,当我在处理程序中查看这个时BeginRequest,会话总是显示为空。我尝试了其他各种活动,但都没有运气。对此有什么想法吗?

0 投票
2 回答
298 浏览

c# - 关于 .NET 中的 URL 重写的问题

真正的 url 是http://www.example.com/site.aspx?site=google.com 我希望重写结果更友好。像这样:http ://www.example.com/google.com 在 C# 代码中,我不想使用第三方库,只使用 RewritePath 方法或一些代码

0 投票
1 回答
551 浏览

c# - 将发布数据的路径重写到 WCF 服务

假设我定义了简单的 WCF 服务

和简单的 http 模块来重写 url

所以每次调用方法都会被翻译成带参数的TestMe方法

现在我想在这里发布整个请求,

对于这个调用 RewritePath 没有传递服务请求者发布的流,我无法找到解决它的方法。如何重写 url 并保持原始请求字节数组被传输?

0 投票
4 回答
2976 浏览

asp.net-mvc - RewritePath 而不是 MVC 中的返回视图

有没有办法重写显示不同视图而不是 RedirectToAction 或 Redirect 的路径?我不希望 url 改变,但请注意常规 RewritePath 不能“返回”,因此该操作实际上一直在跟踪它!

更新:我刚刚注意到,当我使用stackoverflow(使用ProcessRequest)中循环的一个时,如果我运行F5它可以工作,但是当我直接访问时,它给了我“'HttpContext.SetSessionStateBehavior'只能在'HttpApplication.AcquireRequestState'事件之前调用长大了。” 这意味着我在 IIS 设置中遗漏了一些东西,它是什么?:秒

[更新]为了明确这一点,我需要重写一个“url”而不是一个动作或视图名称,它必须是一个 url,就像好的旧 RewritePath(url)

0 投票
0 回答
390 浏览

iis - HttpContext.RewritePath 破坏了内置 IIS gzip

你好。

HttpContext.RewritePath用来根据请求和主机将请求定向到内部站点文件夹。

问题:当我对 IIS 缓存和 GZIPped 的任何静态文件执行任何需要 RewritePath 的请求时,我得到的响应是带有标题的原始非压缩文件内容Content-Encoding: gzip,这导致“内容解码失败”错误。但是,当我执行相同的请求但使用完整的目录路径时(在这种情况下,我的代码中跳过了 RewritePath)我得到了正确的 gzip 压缩内容Content-Encoding: gzip


例如:
出现错误的情况:
请求 url:localhost/lib/ext_3.4.0/resources/css/ext-all.css
使用 HttpContext.RewritePath 将请求路径重写为:localhost/_sites/mainSite/lib/ext_3.4.0/resources/css/ext-all.css

第一个响应不是压缩的——通常的 IIS 行为。当我按 ctrl+F5 时,出现“内容解码失败”错误。通过使用 Fiddler2,我可以看到响应内容未压缩,并且包含Content-Encoding: gzip标头。

没有错误的情况:
请求url:localhost/_sites/mainSite/lib/ext_3.4.0/resources/css/ext-all.css
请求路径没有被重写,因为它不需要。

第一个响应不会再次压缩。当我按 ctrl+F5 时,我得到正常的文件内容。通过使用 Fiddler2,我可以看到响应内容被压缩,大小减少了 5 倍,并且包含Content-Encoding: gzip标题。


我不能扔掉 RewritePath,我需要 IIS gzip。有没有办法让他们成为朋友?

0 投票
2 回答
1779 浏览

asp.net - 图像的 URL 重写

我试图弄清楚如何使用 Application_BeginRequest 为网站上的图像启用短 URL。

目前,要打开图像,我必须使用完整的 URL,如下所示:

我希望可以使用短 URL 访问图像:

ViewImage.aspx 从数据库中动态检索图像。

假设我应该使用 RewritePath 方法。但具体如何?

0 投票
0 回答
424 浏览

asp.net - 将 HttpContext.RewritePath() 与静态文件一起使用

我们使用 HttpContext.RewritePath() 来重写静态文件的路径。我们这样做是为了能够虚拟化服务器上​​静态文件的位置。

当我们这样做时,IIS 似乎表现得很奇怪,有时不压缩文件的内容,但仍然将 gzip 编码放在 http 响应标头中。发生这种情况时,浏览器无法正确解析静态文件,因为它们试图解压缩明文数据。

我们一直在四处寻找,发现有几个线程在谈论这个问题,但是对于如何避免这个问题,或者为什么不允许重写静态文件的路径,我们找不到令人满意的答案。

不应该可以重写静态文件的路径吗?

这里有几页我发现了这个问题:

IIS7 中的 GZip 压缩不起作用,但内容编码标头设置为 gzip

HttpContext.RewritePath 破坏了内置 IIS gzip

0 投票
0 回答
275 浏览

jquery - 使用 HttpContext.RewritePath() 时,脚本服务在 VS 开发服务器上返回 405?

我似乎遇到了一个非常具体的问题,对于问题的长度表示歉意。

我有一个脚本服务,实际居住在/somepath/service.asmx. 我正在使用 url 重写模块 (UrlRewritingNet v2.0) 来重写来自/service.asmx我的物理位置的调用。该模块使用 .Net 的HttpContext.RewritePath()功能。

我的服务公开了 method dosomething,并且在我的页面上有一个脚本调用:

当我在 IIS 中运行此代码时 - 它返回状态代码200,但当我在 VS 开发服务器上运行此代码时 - 它返回405 Method Not Allowed。来自堆栈跟踪的错误消息是:

请注意,在此消息中,路径似乎已正确路由。

有趣的是——我几乎可以肯定这是一个路由问题,因为当我将我的 ajax 调用更改为完整的 url 时/somepath/service.asmx/dosomething——IIS 和 VS 开发服务器都可以正常工作。

任何想法如何避免405?

0 投票
0 回答
553 浏览

iis - RewritePath not working in IIS 7.5 integrated mode

I got an issue when using HttpContext.RewritePath in HttpModule for URL rewriting.

Environment: Windows Server 2008 R2, IIS 7.5 integrated mode, .Net 4.0 In my project, most URLs will be rewritten to the same aspx page(Handler.aspx). The aspx page will do different thing based on the URL.

Example:

"/en/abc/" will be written to Handler.aspx. [Page output: This is abc]

"/en/test/" will be written to Handler.aspx. [Page output: This is test]

"/en/test/a.html" will be written to Handler.aspx as well. [Page output: This is test]. As I only check the string "test" and ignore the sting "/a.html", the output is same as the URL "/en/test/". And a.html doesn't exist in wwwroot folder, the URL is a bad case for testing.

I got a issue, if 2 or more requests that contain htm/html extension come simultaneously Example: "/en/test/a.htm" or "/en/test/a.html"

HttpContext.RewritePath will not work for any request after that. Handler.aspx won't be called any more, and the page output will always be 'This is test' no matter what URL entered. Http status code is 200 when the issue occurs. Also if visit the real aspx page(Handler.aspx), it will display the same content 'This is test' as well. It seems like a server-side cache. And this issue can be resolved by recycling app pool in IIS.

In following cases, the issue won't occur:

  1. Visit these two requests with a delay, for example visit "/en/test/a.html" first and wait 3-5 seconds, then visit "en/test/a.html" again. Everything works fine.

  2. Change IIS pipeline from integrated mode to classic mode. If visit "/en/test/a.html", a IIS 404 page will be displayed.

  3. Use Server.Transfer instead of HttpContext.RewritePath, everything works fine.

  4. The URL contains .php, .jsp, .xml won't cause the issue

I have to find the root cause of it. Any potential reason may cause this issue?