1

GrailsアプリケーションはVPSにデプロイされていますが、wwwバージョンと非wwwバージョンは同じではありません。実際には2つのサイトがあります。つまり、ブラウザにはバージョンごとに1つずつ、2つのCookieがあるため、www以外のバージョンでログインしているユーザーはwwwバージョンでログインしていません。

Grailsでwww以外のバージョンをwwwバージョンにポイントする最良の方法は何ですか?アプリケーションサーバーとしてTomcatを使用しています。

Grailsフィルターを作成し、www以外のすべてのURLをwwwが追加された同じURLに変更し、永続的なリダイレクトを行うことを考えていました。しかし、これがそれを行うための良い方法であるかどうかはわかりません。Tomcatの前にApacheサーバーがないため、URL書き換えメカニズムを使用できません。

ありがとうございました。

4

2 に答える 2

3

メインのTomcat構成にアクセスできますか?Tomcatは仮想ホスティングを実行できるため、リダイレクトを実行するための単純なWebアプリケーションを使用して別の仮想ホストをセットアップできます。

conf / server.xml

<Engine name="Catalina" defaultHost="localhost">
  <Host name="localhost" appBase="webapps" ...>
    <!-- current configuration, this Host will serve www.example.com -->
  </Host>

  <Host name="example.com" appBase="nonwww-webapps" />
</Engine>

nonwww-webapps / ROOT / WEB-INF / web.xml

<?xml version="1.0" ?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

  <servlet>
    <servlet-name>redirectToWww</servlet-name>
    <jsp-file>/WEB-INF/redirect.jsp</jsp-file>
  </servlet>

  <servlet-mapping>
    <servlet-name>redirectToWww</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

nonwww-webapps / ROOT / WEB-INF / redirect.jsp

<% response.sendRedirect("http://www.example.com" + request.getRequestURI() +
      (request.getQueryString() == null
          ? ""
          : ("?" + request.getQueryString())
      )); %>

または、302リダイレクトではなく301リダイレクトが必要な場合

<% response.setStatus(301);
   response.setHeader("Location", "http://www.example.com" + request.getRequestURI() +
      (request.getQueryString() == null
          ? ""
          : ("?" + request.getQueryString())
      ));
   response.setHeader("Connection", "close"); %>
于 2013-01-17T19:11:54.303 に答える
0

Tomcatの前にApacheサーバーがない場合は、UrlRewriteFilterを使用できます。Apacheのように、Tomcat(および他のWebアプリケーションサーバー)を直接使用してURL書き換えを実行するツール。

于 2013-01-17T18:15:25.600 に答える