如何将IIS服务器中的特定端口重定向到其他端口

时间:2018-08-27 13:51:27

标签: redirect iis web url-rewriting port

我的URL重写规则仅适用于IIS中的端口80。

重写适用于:http://localhost:80-> http://localhost:8100

重写适用于:http://localhost:80/redirect-> http://localhost:8100

重写不适用于:http://localhost:8080-> http://localhost:8100

重写不适用于:http://localhost:8080/redirect-> http://localhost:8100

我的web.config如下:

<?xml version="1.0" encoding="UTF-8"?>
 <configuration>
<system.webServer>
    <directoryBrowse enabled="true" showFlags="Date, Time, Size, Extension, LongDate" />
    <rewrite>
        <rules>
            <rule name="Redirect to port 8100" stopProcessing="true">
                <match url="(.*)" />
                <conditions logicalGrouping="MatchAny">
                    <add input="{SERVER_PORT}" pattern="^8100$" negate="true" />
                </conditions>
                <action type="Redirect" url="http://{HTTP_HOST}:8100/{R:0}" />
            </rule>
        </rules>
    </rewrite>
 </system.webServer>
</configuration>
  

web.config仅在默认的http端口80/443上工作,而在特定端口上不工作。

要使用所有端口,必须在web.config中进行哪些更改?

1 个答案:

答案 0 :(得分:0)

主要问题是变量{HTTP_HOST}已包含PORT信息。

要解决此问题,您需要调整两件事:

  1. 在其中扩展匹配模式
  2. 设置正确的重定向地址

我对您的web.config进行了调整,以查看它如何与您的示例配合使用:

<?xml version="1.0" encoding="UTF-8"?>
 <configuration>
<system.webServer>
    <directoryBrowse enabled="true" showFlags="Date, Time, Size, Extension, LongDate" />
    <rewrite>
        <rules>
            <rule name="Redirect to port 8100" stopProcessing="true">
                <match url="(.*)" ignoreCase="true" />

                <conditions logicalGrouping="MatchAll" trackAllCaptures="true" >
                    <add input="{HTTP_HOST}" pattern="([^/:]*?):[^/]*?" />
                </conditions>

                <action type="Redirect" url="http://{C:1}:8100/{R:0}" appendQueryString="false" />

            </rule>
        </rules>
    </rewrite>
 </system.webServer>
</configuration>