2016-09-25 2 views
0

Ich habe eine Website mit der folgenden Struktur an der Wurzel für eine Node.js AppAzure Rewrite-Regeln verursachen Fehler 404 in detaillierten Protokollen

package.json 
server.js 
public 
    index.html 
    css 
    js 
    images 
...other folders 

Ich mag die Person treffen nur innerhalb des öffentlichen Ordners mit einem Erzwungene HTTPS-Verbindung.

Meine aktuelle Datei web.config sieht wie folgt aus

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    This configuration file is required if iisnode is used to run node processes behind 
    IIS or IIS Express. For more information, visit: 

    https://github.com/tjanczuk/iisnode/blob/master/src/samples/configuration/web.config 
--> 

<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 server.js file is a node.js site to be handled by the iisnode module --> 
     <add name="iisnode" path="server.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="^server.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="server.js"/> 
     </rule> 

     <rule name="Force HTTPS" enabled="true"> 
      <match url="(.*)" ignoreCase="false" /> 
      <conditions> 
      <add input="{HTTPS}" pattern="off" /> 
      </conditions> 
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" /> 
     </rule>  

     <rule name="Redirect rquests to default azure websites domain" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions logicalGrouping="MatchAny"> 
       <add input="{HTTP_HOST}" pattern="^zupbot\.azurewebsites\.net$" /> 
      </conditions> 
      <action type="Redirect" url="https://www.zup.chat/{R:0}" /> 
      </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> 

    <!-- Make sure error responses are left untouched --> 
    <httpErrors existingResponse="PassThrough" /> 

    <!-- 
     You can control how Node is hosted within IIS using the following options: 
     * watchedFiles: semi-colon separated list of files that will be watched for changes to restart the server 
     * node_env: will be propagated to node as NODE_ENV environment variable 
     * debuggingEnabled - controls whether the built-in debugger is enabled 

     See https://github.com/tjanczuk/iisnode/blob/master/src/samples/configuration/web.config for a full list of options 
    --> 
    <!--<iisnode watchedFiles="web.config;*.js"/>--> 
    </system.webServer> 
</configuration> 

Jedes Mal, wenn ich versuche, meine Website zugreifen, versucht es, eine server.js zu finden und gibt mir diesen Fehler { „Code“: „NotAuthorized“, "message": "/ server.js"}

Mein node.js Code tut dies statische Dateien dient

server.get('/.*/', restify.serveStatic({ 

    //Ensure that people can only access the files within the public directory and none of the protected server files 
    directory: __dirname + '/public', 
    default: constants.INDEX_HTML, 
    match: /^((?!server.js).)*$/ // we should deny access to the application source 
})); 

Wie kann ich die Person nehme gerade in den öffentlichen Ordnern eines Immer mit einer HTTPS-Verbindung? Danke im Voraus für Ihre Hilfe.

UPDATE 1

Ich fügte hinzu, die HTTPS vor jeder anderen Regel umleiten, die eine Stopprocessing hat = true und es funktioniert, aber wenn ich in meiner Heimat Website http: //.azurewebsites.net, dauert es noch mich Wie kann ich sitename.azurewebsites.net auf die https-Version meiner benutzerdefinierten Domain umleiten?

Antwort

1

Bitte versuchen Sie die folgenden Regeln für das Umschreiben in web.config:

<rule name="DynamicContent" stopProcessing="true"> 
    <conditions> 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/> 
    </conditions> 
    <action type="Rewrite" url="server.js"/> 
</rule> 

<rule name="Redirect to https" enabled="true" patternSyntax="ECMAScript" stopProcessing="true"> 
    <match url="(.*)"/> 
    <conditions> 
     <add input="{HTTPS}" pattern="Off"/> 
    </conditions> 
    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" /> 
</rule> 

dem die URL your_site.azurewebsites.net/<asset> zu https Protokoll umschreiben, wenn es eine Datei <asset> in den öffentlichen Ordner mit dem Namen ist, wie Sie in restify.serveStatic konfiguriert.

Und es wird nicht die URL neu schreiben, die die Route Einstellung in Ihrer Restify-Anwendung übereinstimmen können.

Alle weiteren Bedenken, bitte zögern Sie nicht, lassen Sie es mich wissen.

Verwandte Themen