2013-02-11 15 views
5

Non riesco a rimuovere la barra finale degli URL del mio sito anche con la riscrittura dell'URL da: http://ruslany.net/2009/04/10-url-rewriting-tips-and-tricks/.IIS Forza la barra anche con l'URL Riscrivi per rimuoverlo

Frustrante proprio perché dovrebbe essere così semplice ma i miei tentativi non hanno prodotto alcun risultato.

Sono arrivato persino a creare una directory di test e ho aggiunto un file chiamato desktops.aspx e una sottocartella chiamata desktop.

senza la sottodirectory "/ test/desktop" si carica bene poiché ho impostato il documento predefinito per guardare desktops.aspx.

con una sottocartella creata e facendo ancora riferimento a "/ test/desktop" forza la barra e guarda la sottodirectory.

Perché IIS esegue questa operazione dal momento che dovrebbe cercare prima il file, quindi la directory secondaria è corretta? Ci sono delle impostazioni sul lato server che potrebbero forzare la barra?

URL Rewrite Snippet:

<rule name="SEO - Remove trailing slash" stopProcessing="false"> 
<match url="(.+)/$" /> 
<conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
<add input="{HTTP_METHOD}" pattern="GET" /> 
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
</conditions> 
<action type="Rewrite" url="_{R:1}" /> 
</rule> 

qualsiasi aiuto sarebbe gradito

risposta

4

Si utilizza un'azione di tipo Rewrite ma si desidera un Redirect.

cambiare la configurazione per:

<rule name="SEO - Remove trailing slash" stopProcessing="false"> 
    <match url="(.*)/$" /> 
    <conditions> 
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="{R:1}" /> 
</rule> 

È inoltre necessario modificare url="(.+)/$" a url="(.*)/$".

SUGGERIMENTO:

Il modo migliore per testare il vostro modello è quello di utilizzare lo strumento modello di prova di IIS.
Nella radice del tuo sito Web -> Riscritto URL -> Crea una regola vuota -> fai clic sul modello di prova:

+0

Ha senso. Grazie! In realtà stavo provando con un reindirizzamento con tutte le altre regole ma ho dimenticato di controllarlo su questo. In ogni caso, ho aggiornato la regola seguendo le tue istruzioni, ma continuo a essere reindirizzato alla barra. è l'unica regola attualmente in uso. /test/desktop reindirizza a/test/desktop/ – fseminario

+0

Ho fatto un errore, dovresti usare '(. *)/$' Come modello (vedi la mia risposta aggiornata). Avrei dovuto seguire il mio stesso consiglio ... :) – cheesemacfly

+0

hehe. Gotcha. Ho aggiornato ma ancora non funziona. La barra viene forzata nuovamente. – fseminario

0

Il problema che avevo erano i collegamenti ai file PDF che avevano le barre in avanti, quindi cosa ha funzionato per me in Windows Server 2008 R2 che esegue IIS 6.1:

Clicca sul sito web che ha bisogno della regola e nella vista Features aprirsi URL Rewrite e poi sulla sezione Actions (riquadro a destra) scegliere Add Rule(s) selezionare Append or Remove the trailing slash symbol. Nella finestra successiva del menu a discesa scegliere remove if exists.

Spero che questo aiuti.

0

Stavo avendo lo stesso problema ed ecco quello che ho trovato.

Il mio intento era di utilizzare questa regola su un sito Web MVC ma non volevo testare in produzione, quindi ho testato la regola su un sito già configurato, che si trattava di moduli web asp.net.

Ho riscontrato lo stesso problema di te. Navigando su www.example.com/test reindirizzato a www.example.com/test/ anche con la regola in vigore.

Quindi ho notato le condizioni per verificare se l'url richiesto è un file o una directory e li ho rimossi.

Ora vai a www.example.com/test/ reindirizzato a www.example.com/test. Sìì! No. IIS ha aggiunto automaticamente un altro reindirizzamento a www.example.com/test/ risultante in un ciclo di reindirizzamento. Boo.

Ho quindi trovato questo articolo https://support.microsoft.com/en-us/kb/298408 che si riferisce a IIS 6 ma è ovviamente ancora un problema.

Quindi, perché sono in un sito di moduli Web asp.net, nel mio caso/test è una directory fisica e c'è qualcosa in IIS che forza la barra finale per le directory. E mi spiace dirlo ma non sono riuscito a trovare un modo per disattivarlo facilmente.

Tuttavia! Il mio requisito era per MVC e route configurate che NON fossero directory. Così ho provato di nuovo su un sito MVC e il reindirizzamento per rimuovere la barra finale funzionava perfettamente.

La regola ho finito con è:

<rule name="RemoveDatSlash" stopProcessing="true"> 
    <match url="(.*)/$" /> 
    <conditions> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    </conditions> 
    <action type="Redirect" redirectType="Permanent" url="{R:1}" /> 
</rule> 

Spero che questo aiuti!

Problemi correlati