29

我试图使用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>

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

可能是什么问题呢?

4

4 回答 4

56

我昨天遇到了同样的问题,我花了很长时间才弄清楚。

这里的关键是您的重写操作中有一个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/

于 2015-11-24T10:29:41.360 回答
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>

第一条规则"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>

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

于 2013-06-11T08:18:41.640 回答
1

请确保 MVC 路由不会窃取您的请求。为防止这种情况发生,请忽略您尝试重写的路线:

RouteTable.Routes.Ignore("blog/{*pathInfo}");

灵感来自:https ://sitecore.stackexchange.com/questions/3645/how-to-setup-a-reverse-proxy-with-sitecore

于 2018-06-13T11:14:56.233 回答
-1

将 Rewrite URL 更改为 AbsolutePath 而不是放入 http://... 它应该是

<action type="Rewrite" url="{R:1}" /> 

它对我有用,但就我而言,我已被重写为固定网页。

于 2017-02-20T02:51:20.483 回答