技术分享 JAVA WEB 查看内容

tomcat中使用filter进行301重定向

老高 | 发布于 2015-04-30 12:52| 浏览()| 评论() | 收藏() | 点赞() | 打印

摘要: 网站在做域名解析时,经常会解析2个域名,即带www的和不带www的。这样做的目的是,当用户使用不带www的域名时,也可以正常访问你的网站。

网站在做域名解析时,经常会解析2个域名,即带www的和不带www的。这样做的目的是,当用户使用不带www的域名时,也可以正常访问你的网站。但是这样做的后果是,你站点主域名的pr值分散到其他几个URL上了。因为在搜索引擎看来,带www和不带www的URL是2个完全不同的URL,当它们指向同一个网站时,会让搜索引擎不懂应该选择哪一个URL作为主要的域名。

如果你用301重定向把其他几个URL如pinhuba.com转到www.pinhuba.com时,相应的PR也就集中在主域名:www.pinhuba.com上了。

下面老高教大家如何用servlet的filter技术来实现301重定向,当然pinhuba.com现在也是这样实现的。

创建filter

package com.jeecms.common.web;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class WwwFilter implements Filter {
	private String originUrl;
	private String targetUrl;

	public void init(FilterConfig filterConfig) throws ServletException {
		this.originUrl = filterConfig.getInitParameter("originUrl");//来源url
		this.targetUrl = filterConfig.getInitParameter("targetUrl");//目标url
	}

	public void destroy() {

	}
	
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
		String hostName = req.getServerName();
		if (hostName.startsWith(originUrl)) {
			HttpServletResponse response = (HttpServletResponse) resp;
			HttpServletRequest httpRequest = (HttpServletRequest) req;
			String queryString = (httpRequest.getQueryString() == null ? "" : "?" + httpRequest.getQueryString());
			response.setStatus(301);
			String requestUrl = httpRequest.getRequestURL().toString();
			requestUrl = requestUrl.replace(originUrl, targetUrl);

			response.setHeader("Location", requestUrl + queryString);
			response.setHeader("Connection", "close");
		} else {
			chain.doFilter(req, resp);
		}
	}
}

在web.xml文件中配置filter

<filter>
	<filter-name>WwwFilter</filter-name>
	<filter-class>com.jeecms.common.web.WwwFilter</filter-class>
	<init-param>
		<param-name>originUrl</param-name>
		<param-value>pinhuba.com</param-value>
	</init-param>
	<init-param>
		<param-name>targetUrl</param-name>
		<param-value>www.pinhuba.com</param-value>
	</init-param>
</filter>

<filter-mapping>
	<filter-name>WwwFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>


发表评论(对文章涉及的知识点还有疑问,可以在这里留言,老高看到后会及时回复的。)

表情