2014-06-08 6 views
7

Ich versuche, eine Node.js-Anwendung auf IIS bereitzustellen. Ich habe die Samples im GitHub-Repository gesehen (https://github.com/tjanczuk/iisnode/tree/master/src/samples).Serving statische Dateien in IISNODE mit StaticFiles URL Rewrite

Ich stecke bei der Bereitstellung statischer Dateien fest. Wie eine normale Node-Anwendung habe ich die statischen Dateien in einem Ordner namens public gespeichert. Wie in einigen Blogs/Foren vorgeschlagen, habe ich die folgende Regel zu web.config hinzugefügt:

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

Aber es funktioniert nicht. Wenn jemand eine Beispielanwendung hat, die dieses Problem demonstriert, wäre das eine große Hilfe.

Antwort

5

Überprüfen Sie ein Beispiel iisnode web.config, das Anforderungen für statische Dateien im Ordner public an den statischen Dateihandler des IIS statt Node.js um http://tomasz.janczuk.org/2012/05/yaml-configuration-support-in-iisnode.html umleitet.

+0

Danke für die Antwort. Was sollte das Format des relativen Pfades sein, der angegeben werden soll, während auf die Skriptdatei in einer HTML-Datei Bezug genommen wird, nachdem das Umschreiben angewendet wurde? –

+0

Das gleiche wie wenn die web.config vollständig fehlte und die IIS-Standardregeln angewendet wurden (einschließlich der Tatsache, dass Sie Ihre server.js nicht als Node.js-Anwendung erkannt haben). Die Regel für den statischen Inhalt schreibt die URL nicht um, sie verhindert lediglich, dass der iisnode-Handler sie abfängt. –

+0

Einfach bestätigen, also wäre der relative Pfad einer statischen JavaScript-Datei /appname/public/scripts/main.js. Korrigiere mich, wenn ich irgendwo falsch liege. –

7

Falls jemand über diese Frage auf Google kommt und hatte Probleme mit der Probe web.config in der akzeptierten Antwort erwähnt ...

Diese web.config-Datei, die für mich gearbeitet:

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

Meine Ordnerstruktur ist:

  • VirtualPath/-, um den IIS bezieht sich 01 Virtual Path
      konfiguriert
    • public/- enthält statische Inhalte
    • Server/- enthält Serveranwendungsdateien
Verwandte Themen