2015-04-17 13 views
7

Ho un pool di applicazioni che voglio eseguire con un server ARR che dovrebbe fungere da router per tutte le mie applicazioni. Ho definito una serie di regole che dovrebbero essere applicate in cascata, ma qualcosa non funziona nel modo corretto.Le regole ARR di IIS non funzionano come previsto nell'aggiunta di barre finali alle mie applicazioni

La prima regola deve gestire le barre finali, le altre regole devono mappare le mie applicazioni da risolvere per il mio server DNS interno con l'URL di riscrittura, ma il problema sembra verificarsi durante la prima regola.

Il comportamento predefinito è che, se provo a lanciare la mia applicazione con http://myapp restituirà 404 del codice, se provo a farlo funzionare con l'aggiunta della barra (http://www.myapp/) tutto funziona bene. Quindi in pratica la mia regola dovrebbe controllare i pattern Url senza la barra: se la risorsa è una directory, dovrebbe aggiungere la barra alla fine dell'URL.

Così il modello per catturare l'URL è la seguente espressione regolare:

.*[^/]$ 

Questo dovrebbe prendere URL senza/alla fine e ho testato con successo esso.

Per ogni URL che corrisponde all'espressione regolare, dovrei controllare se si tratta di una directory, e nel caso devo impostare la barra finale, in modo da:

{REQUEST_FILE} -> Is a directory 

Ma questo non funziona. Ho anche provato ad aggiungere la seguente regola senza successo:

{REQUEST_FILE} -> Is not a file 

La regola da applicare è la seguente:

Redirect a (riscrittura conduce stesso comportamento, anche):

{R:O}/ 

Sembra non aggiungere/ai miei URL e non so come controllare quali passaggi non riescono ad avere successo. Le prossime regole fondamentalmente seguire questo modello:

mywebapp/* redirect to www.mydnsappaddress/{R:1} 

EDIT: aggiungo il campione web.config visualizzare la versione testuale delle regole.

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
       <clear /> 
       <rule name="Trailing Slash" enabled="false" stopProcessing="true"> 
        <match url=".*[^/]$" /> 
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
         <add input="{REQUEST_FILENAME}" matchType="IsFile" /> 
        </conditions> 
        <action type="Redirect" url="{R:0}/" /> 
       </rule> 
       <rule name="app1" enabled="false" patternSyntax="Wildcard"> 
        <match url="sites/doc/*" /> 
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> 
        <action type="Rewrite" url="http://mypersonaldnsaddress/{R:0}" /> 
       </rule> 
       <rule name="ASTCO portale NWS" enabled="true" patternSyntax="Wildcard"> 
        <match url="portale/*" /> 
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> 
        <action type="Rewrite" url="http://mypersonaldnsaddress/{R:0/{R:0}" /> 
       </rule> 

      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 
+0

Puoi elencare le regole che stai utilizzando, o almeno un campione? Dovrebbero apparire come XML nel file web.config. –

+0

li ho aggiunti nel post principale. – lateralus

risposta

0

devo chiedere l'ovvio: fa il tuo esempio, hanno deliberatamente enabled insieme a false?

Sono stato in grado di farlo funzionare esattamente come desiderato: se la directory esiste, aggiungi una barra alla fine, in caso contrario, non farlo.

<rule name="Trailing Slash" enabled="true" stopProcessing="true"> 
    <match url=".*[^/]$" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" /> 
    </conditions> 
    <action type="Redirect" url="{R:0}/" /> 
</rule> 
+0

Ho intenzione di provarlo ora, grazie. – lateralus

Problemi correlati