Grails应用程序 - 将非www版本重定向到网站的www版本

时间:2013-01-17 17:40:37

标签: java tomcat grails redirect

我们的Grails应用程序部署在VPS上,但www和非www版本都是 不一样。实际上有两个站点,即浏览器中有两个cookie,每个版本一个,因此以非www版本登录的用户未登录www版。

在Grails中将非www版本指向www版本的最佳方法是什么?我们是 使用Tomcat作为应用程序服务器。

我正在考虑创建一个Grails过滤器,并将所有非www网址更改为附加了www的相同网址,并进行永久重定向。但我不确定这是否是一个很好的方法。我们在Tomcat之前没有Apache服务器,所以我们不能使用它的url重写机制。

谢谢。

2 个答案:

答案 0 :(得分: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-web应用/ 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-web应用/ ROOT / WEB-INF / redirect.jsp中

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

或者,如果您想要301而不是302重定向

<% response.setStatus(301);
   response.setHeader("Location", "http://www.example.com" + request.getRequestURI() +
      (request.getQueryString() == null
          ? ""
          : ("?" + request.getQueryString())
      ));
   response.setHeader("Connection", "close"); %>

答案 1 :(得分:0)

如果您在Tomcat前没有Apache服务器,则可以使用UrlRewriteFilter。一种工具,用于执行URL重写,如Apache,但直接使用Tomcat(和其他Web应用程序服务器)。

相关问题