2013-08-01 27 views
7

Wdrażam witrynę na platformie Azure i próbuję przepisać reguły przepisywania witryny.Dlaczego otrzymuję 500, gdy dodaję regułę przepisywania do mojego Web.config na Azure?

Mam następujący kod, a to działa:

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

ale kiedy dodać następujący kod wewnątrz znacznika reguł pojawia się komunikat o błędzie The page cannot be displayed because an internal server error has occurred. Czemu?

<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

Myślę, że powinieneś sformatować swoje pytanie. Nie mogę zobaczyć, jaką regułę dodajesz. Trzeci jest taki sam, jak drugi, o którym mówisz. Wszystkie trzy reguły (dwa duplikaty) mają te same nazwy. Proponuję opublikować jedną wersję, która działa, a drugą, która nie działa. –

Odpowiedz

2

Zakładam, że pierwsza edycja nie będzie działać. Druga reguła z pierwszej edycji jest taka sama jak druga edycja.

Twój problem polega na tym, że reguły mają ten sam atrybut nazwy: Sendy all. Jest to nielegalne w konfiguracji sieci. Zmień nazwę jednej reguły.

wziąć również do obejrzenia tego węzła (co jest dobre dla debugowania):

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

Upewnij się, jest to jedna z pierwszych rzeczy, w web.config. Następnie otrzymasz kod błędu 500.52 ze szczegółowym opisem, który wskazuje na ten błąd.

Obok problemu, nie dostaję tego, co próbujesz. Rozważmy dać Request do indeksu PHP:

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

Jeśli zadzwonisz website.tld/api/IBar/DoFoo można napisać:

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

Jeśli nie wydobyć szczegóły i dać je jako parametru, cały przepisywania URL rzeczą marek bez sensu.