Domanda

Sto usando UrlRewritingNet in Umbraco per fare un po 'URL di base riscrittura degli URL di prodotto e di categoria. Tutto va bene sulla mia macchina locale (Visual Studio dev-server web) e sul nostro server di sviluppo interno (Window Server 2008 con ISS 7, 32 bit). Ma non riesce sul server di produzione, che è Windows Server 2008 R2 con IIS 7 (64 bit). Il sintomo è che la regola di riscrittura non viene attivato. Il server mi dà semplicemente un errore 404.

La regola di riscrittura aspetto:

<add name="CategoryRewrite"
     virtualUrl="^/products/(.*)/(.*).aspx"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/default.aspx?umbPage=1&amp;maincategory=$1&amp;subcategory=$2"
     ignoreCase="true"/>

L'aspetto URL come il seguente - questo non funziona:

http://example.net/products/category+name/sub+category.aspx

Se cambio l'URL al seguente funziona in tutte e 3 ambienti:

http://example.net/products/category%20name/sub%20category.aspx

E 'chiaro che la regex nell'attributo virtualUrl non riesce quando il + viene utilizzato per il carattere spazio. Ma devo ammettere, che io riesco a capire il motivo per cui l'espressione regolare non solo sul server di Windows 2008 R2.

sto cercando approfondimenti sulle quali differenze tra Windows Server 2008 R2 e gli altri 2 ambienti. Cosa devo cercare?

mi hanno confermato che lo System.Web.RegularExpressions.dll è la stessa versione sui server.

È stato utile?

Soluzione

Il problema è che il filtro di richiesta di IIS7 rifiuta URL contenenti caratteri +. La soluzione è aggiungere il seguente a voi web.config:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering allowDoubleEscaping="true" />
  </security>
 </system.webServer>
</configuration> 

Per ulteriori informazioni: http: //blogs.iis.net/thomad/archive/2007/12/17/iis7-rejecting-urls-containing.aspx

Un collega ha la brillante idea di eseguire il sito web sul proprio IIS. E poi l'errore è stato ulteriormente definito come 404.11, e da lì su una soluzione era semplice.

Altri suggerimenti

Questo sembra strano per me perché la tua regex trova anche i caratteri '+'. Forse il problema è a causa del primo carattere della regex, inizio stringa '^' che si sta utilizzando. Forse sul server di produzione si ottiene un URL assoluto e sul server ambiente dev un URL relativo passato nel modulo di riscrittura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top