繁体   English   中英

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

[英]IIS Rewrite not working (but redirection does)

我正在尝试使用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 ,它可以正常工作。

可能是什么问题呢?

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

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

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

解决了!

在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>

第一条规则在URL中查找字符串"product.php"并且"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”,为重定向创建新位置。

url重写我遇到404错误。 也许你可以找到它usfull。 请访问https://stackoverflow.com/a/47988082/5784543查看

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

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

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

将重写URL更改为AbsolutePath,而不是将http:// ...更改为

它对我有用,但就我而言,我已经改写为固定的网页。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM