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

标签 java tomcat grails redirect

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

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

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

谢谢。

最佳答案

您可以访问主 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>

非 www-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>

非 www-webapps/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"); %>

关于java - Grails 应用程序 - 将非 www 版本重定向到网站的 www 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14384915/

相关文章:

JAVA。使用 URL 创建 FileOutputStream

java - 如何将一个字符串分割两次并自动创建一个表(有n个元素)?

java - LWJGL 无法使用 OpenGL 3.2 或更高版本

tomcat - 在Jenkins上部署到Tomcat 7时504,但是还是成功

java - 在 Ubuntu 12.04 服务器和 Eclipse EE : servlet won't run a class file 上使用 Tomcat 7

web 文件夹外的 Java Servlet 绝对路径 [ Windows & Linux ]

java - 如何通过 micronaut Http Client 将 grails 应用程序连接到 Consul?

database - grails,关系和级联删除

java - 检查是否授予 FOREGROUND_SERVICE 权限总是返回 false

email - 为什么我在Grails中的邮件中收到错误的链接