Asp.net IIS重写不起作用(但重定向起作用)
我试图使用重写模块2.0重新编写URL,但没能成功。我试图做的是将端口80处对web app的所有调用重新写入IIS中托管的其他应用程序(或者可能在网络上的不同服务器上)。我使用IIS提供的GUI创建了以下规则:Asp.net IIS重写不起作用(但重定向起作用),asp.net,.net,iis,url-rewriting,url-rewrite-module,Asp.net,.net,Iis,Url Rewriting,Url Rewrite Module,我试图使用重写模块2.0重新编写URL,但没能成功。我试图做的是将端口80处对web app的所有调用重新写入IIS中托管的其他应用程序(或者可能在网络上的不同服务器上)。我使用IIS提供的GUI创建了以下规则: <rewrite> <rules> <rule name="ReverseProxyInboundRule1" stopProcessing="true"> <match url="site1/(
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="site1/(.*)" />
<action type="Rewrite" url="http://localhost:7001/{R:1}" />
</rule>
</rules>
</rewrite>
安静简单,但不幸的是它不起作用。另一方面,当我将操作类型更改为重定向
时,它工作正常
有什么问题吗?当我试图解决同样的问题时,偶然发现了这篇旧文章 解决了 使用IIS服务管理器中的重写URL功能,我创建了一个友好的URL规则 这工作正常,当我查看web.config文件(www root)中的规则时,它显示了一条要重定向的规则和一条要重写的规则 我编辑了这个以适合1个匹配。然后,我只是复制了这段代码,编辑每个产品的产品ID。示例如下:
<rule name="RedirectUserFriendlyURL1" stopProcessing="true">
<match url="^product\.php$" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
<add input="{QUERY_STRING}" pattern="^id_product=\b35\b" />
</conditions>
<action type="Redirect" url="990mm-bohemia-cast-iron-electric-radiator"
appendQueryString="false" />
</rule>
此规则将
“product.php?id_product=35”
位重写为“990mm波希米亚铸铁电散热器”,为重定向创建了新位置。我昨天遇到了同样的问题,花了很长时间才弄清楚
这里的关键是,您在重写操作中有一个http://
前缀;这使得这是一个特殊情况,需要由应用程序请求路由处理。第一步是确保安装了应用程序请求路由模块。您可以在找到该模块。安装后,转到您的IIS web服务器(从您的网站升级),然后打开应用程序请求路由缓存功能。从右侧的操作中,选择Server.Proxy.Settings
,并确保“启用代理”选中复选框。这允许URL重写任务重新路由到应用程序请求路由,并且您的反向代理应该可以处理外部请求
这个想法来自于2009年的一篇优秀的博客文章:将重写URL改为AbsolutePath,而不是http://... 应该是
<action type="Rewrite" url="{R:1}" />
这对我来说很有效,但在我的情况下,我已被重写为固定网页。请确保MVC路由不会窃取您的请求。为了防止这种情况发生,请忽略您尝试重写的路由:
RouteTable.Routes.Ignore("blog/{*pathInfo}");
灵感来自:你能定义“不起作用”吗?我的意思是,实际发生了什么?你在使用吗?作为测试,如果你将
type=“Rewrite”
更改为type=“Redirect”
?@cheesemacfly是的,我正在使用应用程序请求路由。当我将其更改为重定向
时,它确实起作用,并将我重定向到目标url。但是,当使用重写
时,我收到一个404错误。并且您已经在应用程序请求路由上启用了代理模式?@cheesemacfly:是的,当然。这就是我遇到的问题d、 它解决了我使用url重写到其他域名时的问题。该解决方案也解决了我的问题。我正在完全重写到另一个域名。你让我的日子过得很愉快(昨天我在这个问题上输了满分)!应该是什么?
RouteTable.Routes.Ignore("blog/{*pathInfo}");