我们的 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/