複数のAngularクライアントに転送するには、いくつかのGETリクエストを処理する必要があります。
https://example.com/web/index.html // Client 1
https://example.com/admin/index.html // Client 2
断片化された(#
-ed)パスを使用したくないので、/web
物事はかなり厄介になります。
これは私の現在機能していない解決策です:
@Controller
public class ForwardController {
@RequestMapping(value = "/*", method = RequestMethod.GET)
public String redirectRoot(HttpServletRequest request) {
String req = request.getRequestURI();
if (req.startsWith("/admin/")) {
return this.redirectAdminTool(request);
}
return "forward:/web/index.html";
}
@RequestMapping(value = "/web/{path:[^.]*}", method = RequestMethod.GET)
public String redirectWeb(HttpServletRequest request) {
return "forward:/web/index.html";
}
@RequestMapping(value = "/admin/{path:[^.]*}", method = RequestMethod.GET)
public String redirectAdminTool(HttpServletRequest request) {
return "forward:/admin/index.html";
}
}
これで、仕事はアクセスしています。
/web/pricing
しかし、機能しないのはアクセスです
/web/pricing/vienna
/web/pricing
ブラウザからアクセスし、「更新」をクリックすると、すべてが機能します。しかし、それはそうではありません/web/pricing/vienna
。
現在、サブパスも機能するようにするために、リクエストを処理する方法と転送する方法がわかりません/web/pricing/vienna
。
これを機能させる方法はありますか?
@RequestMapping
パスを次のようなものに変更すると/web/**
、すべてが無限ループになり、サーバーが破損します。
おそらく必要なのは、次のような式です。
/web(/[^\\.]*)
その結果、
MATCH: /web/pricing
MATCH: /web/specials/city
MATCH: /web/specials/city/street
NO MATCH: /web/index.html
ただし、Springはこの正規表現を好みません。 /web(/[^\\.]*)
結局、この問題は、以下の静的リソースを除くすべてのものに一致する方法を見つけることに要約されます/web
。
これが私がやったことです:
両方のクライアントをサブディレクトリに移動しましたa/
:
static/a/web
static/a/admin
さらに、私は次のForwardController
ように実装しました:
@Controller
public class ForwardController {
@RequestMapping(value = "/*", method = RequestMethod.GET)
public String redirectRoot(HttpServletRequest request) {
return "forward:/a/web/index.html";
}
@RequestMapping(value = "/a/**/{path:[^.]*}", method = RequestMethod.GET)
public String redirectClients(HttpServletRequest request) {
String requestURI = request.getRequestURI();
if (requestURI.startsWith("/a/admin/")) {
return "forward:/a/admin/index.html";
}
return "forward:/a/web/index.html";
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加