2016-07-29 5 views
1

Ich implementiere den HTML5-Modus in einer AngularJS-Anwendung. In dem Server muss ich alles ohne Suffix weiterleiten (so ohne Verlängerung, keine statische Ressource) an die Basis-URL:Angular HTML5-Modus und HAL-Browser

@RequestMapping(value = "/{path:[^\\.]*}") 
public String redirect(HttpServletRequest request) { 
    return "forward:/"; 
} 

Dies funktioniert gut für die Schräg App, aber jetzt wollen die Menschen die HAL verwenden, Browser und dieser Controller sendet auch einige der Browser-Anfragen, wie https://localhost:8080/api.

Ist es möglich, den regulären Ausdruck zu ändern, um alles ohne ein Suffix (wie es jetzt ist) und alles ohne/api?

Dies ist der aktuelle reguläre Ausdruck:

"/{path:[^\\.]*}" 

Zum Beispiel:

Es sollte nicht überein:

  • alles/api
  • alles/apianything
  • alles/Dateiname.extension
  • alles/filename.extensionanything

(die letzten beiden Punkte in der Liste mit den aktuellen Regex sind ok)

Es sollte passen:

  • alles nicht über
  • aufgeführt
+0

Versuchen Sie '" /{path:^(?!https?/:.*/[^/]+)[^.]*} "' –

+0

Aber warum die https? es sollte alles ohne Erweiterung und alles ohne API zusammenpassen. Ich werde bearbeiten, um eine Liste von Beispielen hinzuzufügen –

+1

Ok, versuche '"/{Pfad:^(?! (?:. * [^ /] /)? Api) [^.] * $} "' –

Antwort

1

Es scheint, dass Sie

"/{path:(?!.*api)[^.]*}" 
verwenden können 210

Es entspricht einem String, der keine Punkte und keinen api Teilstring irgendwo in der Zeile hat. Beachten Sie, dass Sie bei einer mehrzeiligen Eingabe [\s\S] anstelle der . im Lookahead verwenden. Das Muster erlaubt auch eine leere Zeichenkette (ersetzen Sie das letzte * durch + `wenn leerer Eingang nicht erlaubt ist).

Denken Sie auch daran, dass, falls das Muster nicht standardmäßig verankert ist (ich denke, es ist hier) oder Sie es bei Regex-Testern testen möchten, müssen Sie Anker hinzufügen: "/{path:^(?!.*api)[^.]*$}". Der Anker ^ entspricht dem Anfang der Zeichenfolge und $ Anker entspricht dem Ende der Zeichenfolge.

+0

Es scheint zu funktionieren. Eine letzte Frage, wie wäre es, wenn ich eine Zeichenkette, die keine Punkte hat, und keine api Teilkette am Anfang der Linie (api nicht irgendwo, aber nicht nur am Anfang) –

+0

zuordnen würde, um ein Muster am Anfang von In der Zeile benötigen Sie '^' Anker oder ein '(? m) ^' oder ein '(^ | \ n)'. Du brauchst also etwas wie '(^ | \ n) (?! api) [^.] * $' –

+0

OK, danke Mann! –