阿里云与tomcat实现301重定向

来源:互联网 发布:淘宝退货填单号页面 编辑:程序博客网 时间:2024/06/03 13:53

何为301 重定向?

301转向(或叫301重定向,301跳转)是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。如下图所示:

该文章所涉及内容均以网站www.xinkedai.com为例

正常未重定向时结果:

重定向时结果


为什么要做301重定向?

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

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

参考其他博客使用urlRewriteFilter没有成功实现,现在用servlet的filter技术来实现301重定向,当然xinkedai.com现在也是这样实现的。

第一步:创建filter


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 StringoriginUrl;

    private StringtargetUrl;

 

    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.dept.web.general.interceptor.WwwFilter</filter-class>

    <init-param>

        <param-name>originUrl</param-name>

        <param-value>xinkedai.com</param-value>

    </init-param>

    <init-param>

        <param-name>targetUrl</param-name>

        <param-value>www.xinkedai.com</param-value>

    </init-param>

</filter>

<filter-mapping>

    <filter-name>WwwFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

阿里云域名配置处需要添如解析:


记录值对应网站IP

需要

0 0