我们的Grails应用程序部署在VPS上,但www和非www版本都是 不一样。实际上有两个站点,即浏览器中有两个cookie,每个版本一个,因此以非www版本登录的用户未登录www版。
在Grails中将非www版本指向www版本的最佳方法是什么?我们是 使用Tomcat作为应用程序服务器。
我正在考虑创建一个Grails过滤器,并将所有非www网址更改为附加了www的相同网址,并进行永久重定向。但我不确定这是否是一个很好的方法。我们在Tomcat之前没有Apache服务器,所以我们不能使用它的url重写机制。
谢谢。
答案 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应用程序服务器)。