URL mit UrlRewritingNet Umschreiben schlägt mit einem + Zeichen in der URL
-
26-09-2019 - |
Frage
Ich verwende UrlRewritingNet in Umbraco einige grundlegende URL zu tun Produkt- und Kategorie URLs Umschreiben von. Alles ist in Ordnung auf meinem lokalen Rechner (Visual Studio Entwickler-Webserver) und auf unserem internen Entwicklungsserver (Windows Server 2008 mit EßT 7, 32 Bit). Aber es funktioniert nicht auf dem Produktionsserver, der ist Windows Server 2008 R2 mit IIS 7 (64 bit). Das Symptom ist, dass die Rewrite-Regel nicht ausgelöst wird. Der Server einfach gibt mir ein 404-Fehler.
Die Umschreiben Regel sieht wie folgt aus:
<add name="CategoryRewrite"
virtualUrl="^/products/(.*)/(.*).aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/default.aspx?umbPage=1&maincategory=$1&subcategory=$2"
ignoreCase="true"/>
Die URL sieht wie folgt aus - dies nicht funktioniert:
http://example.net/products/category+name/sub+category.aspx
Wenn ich die URL der es funktioniert in allen drei Umgebungen folgt ändern:
http://example.net/products/category%20name/sub%20category.aspx
Es ist klar, dass der Regex in dem virtualUrl Attribute schlägt fehl, wenn die + für das Leerzeichen verwendet wird. Aber ich muss zugeben, dass ich herausfinden kann, warum die Regex nur auf dem Server R2 Windows 2008 schlägt fehl.
Ich suche Einsichten auf, welche Unterschiede zwischen dem Windows Server 2008 R2 und die anderen 2-Umgebungen. Was soll ich suchen?
Ich habe bestätigt, dass die System.Web.RegularExpressions.dll ist die gleiche Version auf den Servern.
Lösung
Das Problem ist, dass die IIS7 Anfrage Filter lehnt URLs + Zeichen. Die Lösung besteht darin, den folgend Sie Web.config:
<configuration>
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>
</configuration>
Für weitere Informationen: http: //blogs.iis.net/thomad/archive/2007/12/17/iis7-rejecting-urls-containing.aspx
Ein Kollege bekam die glänzende Idee, die Website auf seinem eigenen IIS ausgeführt werden. Und dann wurde der Fehler weiter als 404.11 definiert und von dort an einer Lösung war einfach.
Andere Tipps
Das scheint mir seltsam, weil Ihre Regex passt auch ‚+‘ Zeichen. Vielleicht ist das Problem wegen des ersten Zeichens in der Regex, den Zeichenfolge beginnen ‚^‘, dass Sie verwenden. Vielleicht auf dem Produktionsserver Sie eine absolute URL erhalten und auf Ihrer dev Server-Umgebung eine relative URL in das Umschreiben Modul übergeben.