Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net IIS重写不起作用(但重定向起作用)_Asp.net_.net_Iis_Url Rewriting_Url Rewrite Module - Fatal编程技术网

Asp.net IIS重写不起作用(但重定向起作用)

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/(

我试图使用重写模块2.0重新编写URL,但没能成功。我试图做的是将端口80处对web app的所有调用重新写入IIS中托管的其他应用程序(或者可能在网络上的不同服务器上)。我使用IIS提供的GUI创建了以下规则:

<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}");