重写规则在 web.config 中无法正常工作?

Rewrite rules not working properly in web.config?

我用 React 项目创建了网站并托管在 IIS 网络服务器上(在 VM 上)。我已经定义 web.config 文件规则

    <configuration>
      <system.webServer>
        <httpProtocol>
          <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
          </customHeaders>
        </httpProtocol>
        <iisnode node_env="%node_env%" nodeProcessCountPerApplication="1" maxConcurrentRequestsPerProcess="1024" maxNamedPipeConnectionRetry="100" namedPipeConnectionRetryDelay="250" maxNamedPipeConnectionPoolSize="512" maxNamedPipePooledConnectionAge="30000" asyncCompletionThreadCount="0" initialRequestBufferSize="4096" maxRequestBufferSize="65536" uncFileChangesPollingInterval="5000" gracefulShutdownTimeout="60000" loggingEnabled="true" logDirectory="iisnode" debuggingEnabled="true" debugHeaderEnabled="false" debuggerPortRange="5058-6058" debuggerPathSegment="debug" maxLogFileSizeInKB="128" maxTotalLogFileSizeInKB="1024" maxLogFiles="20" devErrorsEnabled="true" flushResponse="false" enableXFF="false" promoteServerVars="" configOverrides="iisnode.yml" watchedFiles="web.config;*.js" nodeProcessCommandLine="C:\Program Files\nodejs\node.exe" />
        <handlers>
          <add name="iisnode" path="server.js" verb="*" modules="iisnode" />
        </handlers>
    
        <rewrite>
          <rules>
    
    
                      <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
                        <match url="(.*)" />
                        <conditions>
                            <add input="{HTTPS}" pattern="off" />
                        </conditions>
                        <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
                    </rule>
                    <rule name="non-wwwtowww" stopProcessing="true">
                        <match url="(.*)" />
                        <conditions>
                            <add input="{HTTP_HOST}" pattern="^example\.abc$" />
                        </conditions>
                        <action type="Redirect" url="https://www.example.abc/{R:1}" />
                    </rule>
            <rule name="DynamicContent">
                             <conditions>
                                  <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
                             </conditions>
                             <action type="Rewrite" url="server.js"/>
                        </rule>
          </rules>
           <outboundRules>
                    <rule name="Add the STS header in HTTPS responses">
                        <match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
                        <conditions>
                        </conditions>
                        <action type="Rewrite" value="max-age=31536000" />
                    </rule>
                </outboundRules>
        </rewrite> 
      </system.webServer> 
    </configuration> 

上述规则的问题是,当我想直接打开我的网站时,它会重定向到 https://www.example.abc/server.js. I want to open https://www.example.abc

重定向到https://www.example.abc/server.js的原因是因为你的DynamicContent规则,如果你想将子域重定向到主域,你可以参考这个规则:

<rule name="test">
  <match url="^(.*)$" />
    <conditions>
      <add input="{HTTP_HOST}" pattern="^www.example.abc$" />
    </conditions>
  <action type="Redirect" url="https://www.example.abc" />
</rule>