使用StaticFiles URL Rewrite在IISNODE中提供静态文件

时间:2014-06-08 08:35:15

标签: node.js iisnode

我正在尝试在IIS上部署Node.js应用程序。我在GitHub存储库(https://github.com/tjanczuk/iisnode/tree/master/src/samples)上看到了示例。

我被困在提供静态文件。像普通的Node应用程序一样,我将静态文件存储在名为public的文件夹中。根据几个博客/论坛的建议,我将以下规则添加到web.config:

<rule name="StaticContent">
  <action type="Rewrite" url="public{REQUEST_URI}"/>
</rule>

但它不起作用。如果有人有示例应用程序来证明这个问题,那将会有很大的帮助。

2 个答案:

答案 0 :(得分:9)

如果有人在Google上遇到此问题,并且在接受的答案中提到的示例web.config出现问题...

这是适用于我的web.config文件:

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
    <system.webServer>           
        <handlers>  
            <add name="iisnode" path="server/app.js" verb="*" modules="iisnode" />  
        </handlers>  
        <rewrite>  
            <rules>  
                 <rule name="LogFile" patternSyntax="ECMAScript" stopProcessing="true">  
                      <match url="iisnode" />  
                 </rule>  
                 <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">                      
                    <match url="^server\/app.js\/debug[\/]?" />  
                 </rule>  
                <rule name="StaticContent" patternSyntax="ECMAScript" stopProcessing="true">
                    <match url=".*" />
                    <action type="Rewrite" url="public/{C:1}" logRewrittenUrl="true" />
                    <conditions>
                        <add input="{REQUEST_URI}" pattern=".*?virtualpath\/(.*)" />
                    </conditions>
                </rule>
                    <rule name="DynamicContent" patternSyntax="ECMAScript">
                    <match url=".*" />
                    <conditions>
                        <add input="{{REQUEST_FILENAME}}" matchType="IsFile" negate="True" />
                    </conditions>
                    <action type="Rewrite" url="server/app.js" logRewrittenUrl="true" />
                </rule>
            </rules>  
       </rewrite>  

        <security>
            <requestFiltering>
                <hiddenSegments>
                    <add segment="node_modules" />
                </hiddenSegments>
            </requestFiltering>
        </security> 
    </system.webServer>  
</configuration>

我的文件夹结构是:

  • virtualpath / - 指的是IIS配置的虚拟路径
    • public / - 包含静态内容
    • server / - 包含服务器应用程序文件

答案 1 :(得分:5)

查看一个示例iisnode web.config,它将public文件夹中的静态文件请求重定向到IIS的静态文件处理程序,而不是http://tomasz.janczuk.org/2012/05/yaml-configuration-support-in-iisnode.html的Node.js。