新しいHRDストアに移行した後、古いアプリケーションへのリクエストを新しいHRDアプリケーションにリダイレクトしたいと思います。Google移行ツールにエイリアスを作成させる必要があることはわかっていますが、アプリの中間コピーを移行するため(データベースの移行による悪夢のため)、これはオプションではありません。
私の計画は、HTTP 301(HttpServletResponse.SC_MOVED_PERMANENTLY)リダイレクトを行うサーブレットを使用し、web.xmlで/*を使用してサーブレットマッピングを使用することでした。これはローカルで機能しますが、実際のアプリエンジンでは機能しません。app-engineが正しく認識するURLパターンがないようです。これまでのところ:
<servlet-mapping>
<servlet-name>RedirectToHRD</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>RedirectToHRD</servlet-name>
<url-pattern>/*</url-pattern>
<url-pattern>/*/*</url-pattern>
<url-pattern>/*/*/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>RedirectToHRD</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>RedirectToHRD</servlet-name>
<url-pattern>index.jsp</url-pattern>
</servlet-mapping>
クレイジーに見えることは知っていますが、私は必死でした。RedirectToHRDサーブレットを介してリダイレクトされるのは「/」と「index.jsp」のみです。他のページ(JSPまたはその他)の場合、これは機能しません。ログファイルは、ページが提供されることを喜んで示しています。
誰かが何が起こっているのか教えてもらえますか?
編集:私はPeter Knegoが以下に親切に提案したことを行い、フィルターを作成しました。今私のweb.xmlは持っています:
<filter-mapping>
<filter-name>RedirectToHRDFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
これは「実際の」アプリエンジンではまだ機能せず、以前の試みと同様にローカルで機能します。私のフィルターには次の方法があります。
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String redirectURL = "http://fit20app-hrd.appspot.com"+request.getRequestURI();
if (request.getQueryString() != null) {
redirectURL += "?"+request.getQueryString();
}
response.setHeader("Location", redirectURL);
}
ローカルで動作していても、このフィルターが壊れているのではないかと考えています。Googleのサーバーでは、/と/index.jspで機能しますが、それ以外では機能しません。
これは解決されました。以下のコメントを参照してください。