IIS重写不起作用(但重定向确实)

Kas*_*sem 20 .net asp.net iis url-rewriting url-rewrite-module

我正在尝试使用Rewrite Module 2.0进行URL 重写,但我没有运气让它工作.我要做的是将端口80上的所有对Web应用程序的调用重新写入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>
Run Code Online (Sandbox Code Playgroud)

安静简单,但不幸的是它不起作用.另一方面,当我将动作类型更改为时Redirect,它可以正常工作.

可能是什么问题呢?

Rob*_*don 40

昨天我遇到了同样的问题,我花了很长时间才弄明白.

这里的关键是你http://在重写动作中有一个前缀; 这使得这是一个需要由应用程序请求路由处理的特殊情况.第一步是确保安装了"应用程序请求路由"模块.您可以在https://www.iis.net/downloads/microsoft/application-request-routing找到该模块.安装完成后,转到IIS Web服务器(从您的网站升级),然后打开"应用程序请求路由缓存"功能.从右侧的操作中选择Server.Proxy.Settings,并确保选中"启用代理"复选框.这允许将URL重写任务重新路由到应用程序请求路由,并且您的反向代理应该适用于外部请求.

这个想法来自2009年的优秀博客文章:http://ruslany.net/2009/04/10-url-rewriting-tips-and-tricks/

  • 你让我很开心(在我昨天在这个问题上输了整整一天之后)! (2认同)

小智 3

当我试图解决同样的问题时偶然发现了这篇旧文章。

解决了!

使用 IIS 服务管理器中的重写 URL 功能,我创建了一个友好的 URL 规则。

这工作正常,当我查看 web.config 文件(www root)中的规则时,它显示 1 个重定向规则和 1 个重写规则。

我编辑了这个以适合 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>
Run Code Online (Sandbox Code Playgroud)

第一条规则查找"product.php"URL 中的字符串"id_product=35",然后重定向到"990mm-bohemia-cast-iron-electric-radiator"当前不存在的字符串。然后(见下文)

<rule name="RewriteUserFriendlyURL1" stopProcessing="true">
    <match url="^\b990mm-bohemia-cast-iron-electric-radiator\b" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="product.php?id_product=35" />
</rule>
Run Code Online (Sandbox Code Playgroud)

此规则将该"product.php?id_product=35"位重写为“990mm-bohemia-cast-iron-electric-radiator”,为重定向创建新位置。