2016-05-03 9 views
1

Ich habe ein Problem mit meiner MVC-Site mit Routing, wenn am Ende der URL drei Punkte hinzugefügt wurden. Die Anzeige zeigt den Standard-ASP .Net 404 Fehler, aber ich möchte es auf unsere benutzerdefinierte Fehlerseite leiten.URL Rewrite-Muster zum Entfernen nachstehender Punkte (...) am Ende einer URL

Serverfehler in '/' Anwendung.

Die Ressource kann nicht gefunden werden.

Beschreibung: HTTP 404. Die gesuchte Ressource (oder eine ihrer Abhängigkeiten) wurde möglicherweise entfernt, der Name wurde geändert oder ist vorübergehend nicht verfügbar. Bitte überprüfen Sie die folgende URL und vergewissern Sie sich, dass sie richtig geschrieben ist.

Angeforderte URL: /ABC/mattresses/.../

Soweit ich sagen kann, ist es nicht einmal an die MVC machen. Ich denke, der Server sieht es als ein Problem und es behandelt es so, wie wir es nicht wollen. Ich weiß nicht, wie ich das beheben kann, damit ich diese URL zu unserer benutzerdefinierten Fehlerseite leiten kann.

Dinge, die ich habe versucht:

routes.MapRoute("MyRoute", "abc/{Keyword}", new { controller = "KeywordSearch", action = "Index", Keyword = UrlParameter.Optional}); 

routes.MapRoute("MyRouteCatchAll", "abc/{Keyword}/{*CatchAll}", new { controller = "Base", action = "NotFound", Keyword = UrlParameter.Optional, CatchAll = UrlParameter.Optional }); 

routes.MapRoute("CatchAll", "{*catchAll}", new { controller = "KeywordSearch", action = "NotFound" }); 

ich auch mit der URL-Rewrite ausprobiert habe. Vielleicht ist die Regex einfach falsch.

<rule name="trailingdots" enabled="true" stopProcessing="true"> 
     <match url="abc/([_0-9a-z-]+)/^([^.]+)$" /> 
     <action type="Redirect" url="sr/{R:1}/" /> 
    </rule> 

Ich bin bei meinem Verstand Ende. Ich kann nirgends Informationen finden, um mit dieser Situation umzugehen.

Jede Hilfe würde sehr geschätzt werden.

UPDATE: Ich konnte eine URL Rewrite-Regel (s get)

<rule name="RemoveDotsAndSlash" stopProcessing="true"> 
     <match url="(.*)/.../$" /> 
     <action type="Rewrite" redirectType="Permanent" url="{R:1}" /> 
    </rule> 
    <rule name="RemoveDots" stopProcessing="true"> 
     <match url="(.*)/...$" /> 
     <action type="Rewrite" redirectType="Permanent" url="{R:1}" /> 
    </rule> 

zu arbeiten, aber ich möchte so etwas bekommen zu arbeiten, aber es dauert noch mich auf die generische 404-Seite:

<rule name="RemoveTrailingDotsAndSlash" stopProcessing="true"> 
     <match url="^(.*)$" /> 
     <conditions logicalGrouping="MatchAny"> 
     <add input="{REQUEST_URI}" pattern="^(.*)/.../$" /> 
    <add input="{REQUEST_URI}" pattern="^(.*)/...$" /> 
     </conditions> 
     <action type="Redirect" redirectType="Permanent" url="{R:1}" /> 
    </rule> 

Irgendwelche Ideen, wie nah ich bin, genau zu bekommen, was ich will?

Danke

+0

Haben Sie den benutzerdefinierten Fehler in web.config? Zum Beispiel: '' – Win

+1

Mögliches Duplikat von [Dots in URL verursacht 404 mit ASP.NET mvc und IIS] (http://stackoverflow.com/questions/11728846/dots-in-url-causes-404-with-asp-net-mvc-and-iis) – NightOwl888

+0

Ich habe versuchte customErrors in der web.config. Es funktioniert auch nicht. Ich habe auch die im obigen Link vorgeschlagene Methode ausprobiert, bekomme aber jetzt den Fehler "System.Web.HttpException: Fehler beim Zuordnen des Pfades". – Rhonda

Antwort

1

Sie brauchen es nicht mit einem Muster zu entfernen. Wenn Sie den folgenden Tag zu web.config hinzufügen, können Sie benutzerdefinierte Fehler verwenden umleiten Fehlerseite auf Standard:

<system.web>  
    <httpRuntime relaxedUrlToFileSystemMapping="true"/> 
    <customErrors mode="On" defaultRedirect="error.aspx"> 
    <error statusCode="404" redirect="notFound.aspx" /> 
    </customErrors> 
    [ ...] 
</system.web> 

In documentation, die Erklärung ist, dass Einstellung relaxedUrlToFileSystemMapping = true äquivalent ist ungültig Windows-Pfade zu ermöglichen, in URL, dann umgeleitet 404 Fehler und wir könnten es fangen.