2017-06-01 53 views
1

我正在使用Azure WebApps构建静态页面和节点网站的组合,我想定制404页面,但我无法使其工作。 大多数网站是静态的,但我有几条需要服务器代码的路线。我的web.config看起来如下:带节点和Azure Web应用程序的自定义静态错误页面

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.webServer>  
     <httpProtocol> 
      <customHeaders> 
       <remove name="X-Powered-By"/> 
       <add name="x-dns-prefetch-control" value="on"/> 
      </customHeaders> 
     </httpProtocol>  
     <handlers>  
      <add name="iisnode" path="src/server/index.js" verb="*" modules="iisnode"/> 
     </handlers> 
     <rewrite> 
      <rules> 
      <rule name="static"> 
       <match url="(?!dynamicroute).*$" ignoreCase="true"/> 
       <action type="Rewrite" url="dist{REQUEST_URI}"/> 
      </rule> 
      <rule name="dynamic"> 
       <match url="(?:dynamicroute)(.*)$" ignoreCase="true"/> 
       <conditions> 
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/> 
       </conditions> 
       <action type="Rewrite" url="src/server/index.js"/> 
      </rule> 
      </rules>    
     </rewrite> 
     <!-- Make sure error responses are left untouched --> 
     <!--<httpErrors existingResponse="PassThrough"/>--> 
     <httpErrors errorMode="Custom" defaultResponseMode="File" existingResponse="PassThrough"> 
      <remove statusCode="404" subStatusCode="-1" /> 
      <error statusCode="404" path="~/404.html" responseMode="File" /> 
     </httpErrors> 
    </system.webServer> 
</configuration> 

我已经试过的httpErrors不同变化的pathresponseMode值,除去existingResponse="PassThrough"等,但我不能让它工作。

直接访问/404.html作品。访问不存在的url时,服务器返回404错误,而不是我想要的自定义URL。 我在做什么错?

我知道我可以处理nodeland的所有事情,但是我希望尽可能避免这种情况。

回答

2

我能够在Azure App Service上获得自定义404.html页面与以下web.config文件和expressjs应用程序一起使用。你可以把它作为参考。

的web.config

<?xml version="1.0" encoding="utf-8"?> 

<configuration> 
    <system.webServer> 
      <!-- Visit http://blogs.msdn.com/b/windowsazure/archive/2013/11/14/introduction-to-websockets-on-windows-azure-web-sites.aspx for more information on WebSocket support --> 
      <webSocket enabled="false" /> 
      <handlers> 
       <!-- Indicates that the app.js file is a node.js site to be handled by the iisnode module --> 
       <add name="iisnode" path="app.js" verb="*" modules="iisnode"/> 
      </handlers> 
      <rewrite> 
       <rules> 
        <!-- Do not interfere with requests for node-inspector debugging --> 
        <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">      
         <match url="^app.js\/debug[\/]?" /> 
        </rule> 

        <!-- First we consider whether the incoming URL matches a physical file in the /public folder --> 
        <rule name="StaticContent"> 
         <action type="Rewrite" url="public{REQUEST_URI}"/> 
        </rule> 

        <!-- All other URLs are mapped to the node.js site entry point --> 
        <rule name="DynamicContent"> 
         <conditions> 
           <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/> 
         </conditions> 
         <action type="Rewrite" url="app.js"/> 
        </rule> 
       </rules> 
      </rewrite> 

      <!-- bin directory has no special meaning in node.js and apps can be placed in it --> 
      <security> 
       <requestFiltering> 
        <hiddenSegments> 
         <remove segment="bin"/> 
        </hiddenSegments> 
       </requestFiltering> 
      </security> 

      <httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL"> 
       <remove statusCode="404" subStatusCode="-1" /> 
       <error statusCode="404" path="/public/404.html" responseMode="ExecuteURL" /> 
      </httpErrors> 

      <iisnode watchedFiles="web.config;*.js" debuggingEnabled="false" /> 
    </system.webServer> 
</configuration> 

文件夹结构

enter image description here

当我访问任何文件不存在,我得到了显示404页。

enter image description here

+0

我不知道我在做什么错误,但工作。非常感谢! –

相关问题