2013-08-01 6 views
7

Ich stelle Site auf Azure bereit, und ich versuche, Rewrite-Regeln für die Site zu schreiben.Warum erhalte ich eine 500, wenn ich eine Rewrite-Regel zu meiner Web.config in Azure hinzufüge?

Ich habe den folgenden Code, und es funktioniert:

<configuration> 
    <system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="Sendy all" stopProcessing="true"> 
      <match url="^(.+?)$" ignoreCase="true" /> 
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
       <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      </conditions> 
      <action type="Rewrite" url="index.php" appendQueryString="true" /> 
     </rule> 
     <rule name="Sendy all" stopProcessing="true"> 
      <match url="^api/(.+?)$" ignoreCase="true" /> 
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      </conditions> 
      <action type="Rewrite" url="index.php" appendQueryString="true" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
</configuration> 

aber wenn ich den folgenden Code innerhalb der Regeln Tag hinzufügen erhalte ich die Fehlermeldung The page cannot be displayed because an internal server error has occurred. Warum?

<rule name="Sendy all" stopProcessing="true"> 
    <match url="^api/(.+?)$" ignoreCase="true" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="index.php" appendQueryString="true" /> 
</rule> 
+0

Ich denke, Sie sollten Ihre Frage neu formatieren. Ich kann nicht sehen, welche Regel du hinzufügst. Der dritte ist der gleiche wie der zweite, den du als funktionierst. Alle drei Regeln (zwei Duplikate) haben die gleichen Namen. Ich schlage vor, dass Sie eine Version veröffentlichen, die funktioniert und eine, die nicht funktioniert. –

Antwort

2

Ich nehme an, dass die erste Ausgabe nicht funktioniert. Die zweite Regel von der ersten Ausgabe ist die gleiche wie die zweite Ausgabe.

Ihr Problem ist, dass die Regeln das gleiche Namensattribut haben Sendy all. Dies ist in der Web Config Illegal. Benenne eine Regel um.

Werfen Sie auch einen Blick auf diesen Knoten (das für Debugging gut ist):

<?xml version="1.0" encoding="UTF-8" ?> 
<configuration> 
    <system.webServer> 
     <httpErrors errorMode="Detailed" /> 
    </system.webServer> 
</configuration> 

Vergewissern Sie sich, dies ist eines der ersten Dinge, in der web.config ist. Dann erhalten Sie den Fehlercode 500.52 mit einer detaillierten Beschreibung, die diesen Fehler anzeigt.

Neben dem Problem, ich verstehe nicht, was Sie versuchen. Betrachten Sie die Anfrage an Ihren Index PHP zu geben:

<rule name="Sendy all" stopProcessing="true"> 
     <match url="^api/(.+?)$" ignoreCase="true" /> 
     <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="index.php?api=1&amp;request={R:1}" appendQueryString="true" /> 
    </rule> 

Wenn Sie website.tld/api/IBar/DoFoo nennen können Sie schreiben:

$isApi = isset($_GET['api']); //Was the API Rule Affected? 
$request = isset($_GET['request']) ? $_GET['request'] : ''; //"IBar/DoFoo" 

Wenn Sie extrahieren Einzelheiten nicht und geben sie als Parameter, die ganze URL Rewrite Sache macht kein Sinn.

Verwandte Themen