1. 程式人生 > >SpringBoot url重寫 帶www域名與不帶www域名之間跳轉

SpringBoot url重寫 帶www域名與不帶www域名之間跳轉

版權宣告:本文為博主原創文章,未經博主允許不得轉載。    https://blog.csdn.net/a915305592/article/details/82194662

轉自:https://blog.csdn.net/a915305592/article/details/82194662
1、maven依賴
 <!--url重寫-->
        <dependency>
            <groupId>org.tuckey</groupId>
            <artifactId>urlrewritefilter</artifactId>
            <version>4.0.4</version>
        </dependency>
2、重寫UrlRewriteFilter的loadUrlRewriter方法(專案不是打jar包的略過此步)
該攔截器實現的讀取配置檔案的方法是使用類載入器來載入配置檔案,

由於我的SpringBoot專案是以jar包方式打包部署,這種讀取方式會找不到配置檔案,

所以需要重寫loadUrlRewriter()方法。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.tuckey.web.filters.urlrewrite.Conf;
import org.tuckey.web.filters.urlrewrite.UrlRewriteFilter;
 
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import java.io.IOException;
 
@Configuration
public class MyUrlRewriteFilter extends UrlRewriteFilter {
 
    private static final String URL_REWRITE = "classpath:/urlrewrite.xml";
 
    //注入urlrewrite配置檔案
    @Value(URL_REWRITE)
    private Resource resource;
 
    //重寫配置檔案載入方式
    protected void loadUrlRewriter(FilterConfig filterConfig) throws ServletException {
        try {
            //將Resource物件轉換成Conf物件
            Conf conf = new Conf(filterConfig.getServletContext(), resource.getInputStream(), resource.getFilename(), "@@

[email protected]@");
            checkConf(conf);
        } catch (IOException ex) {
            throw new ServletException("Unable to load URL rewrite configuration file from " + URL_REWRITE, ex);
        }
    }
}
3、註冊UrlRewriteFilter到ioc容器中
注:沒有重寫urlRewriteFilter的話,將程式碼中的MyUrlRewriteFilter替換為UrlRewriteFilter

  /**
     * 註冊重寫URL功能的攔截器
     */
    @Bean
    public FilterRegistrationBean urlRewrite(MyUrlRewriteFilter urlRewriteFilter) {
        FilterRegistrationBean registration =
                new FilterRegistrationBean<>(urlRewriteFilter);
        registration.setUrlPatterns(Collections.singletonList("/*"));
        Map initParam = new HashMap<>();
        initParam.put("confPath", "urlrewirte.xml");
        initParam.put("infoLevel", "INFO");
        registration.setInitParameters(initParam);
        return registration;
    }
4、在main/resources下配置urlrewirte.xml檔案,新增跳轉規則
www.baidu.com 重定向到 baidu.com
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
        "http://tuckey.org/res/dtds/urlrewrite3.2.dtd">
<urlrewrite>
    <rule>
        <name>seo redirect</name>
        <!--主機名不等於baidu.com時-->
        <condition name="host" operator="notequal">^baidu.com</condition>
        <from>^/(.*)</from>
        <to type="permanent-redirect" last="true">http://baidu.com/$1</to>
    </rule>
</urlrewrite>
baidu.com 重定向到 www.baidu.com
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
        "http://tuckey.org/res/dtds/urlrewrite3.2.dtd">
<urlrewrite>
    <rule>
        <name>seo redirect</name>
        <!--主機名不等於www.baidu.com時-->
        <condition name="host" operator="notequal">^www.baidu.com</condition>
        <from>^/(.*)</from>
        <to type="permanent-redirect" last="true">http://www.baidu.com/$1</to>
    </rule>
</urlrewrite>
<rule> url 重寫規則,匹配規則有兩種:regex (預設)和 wildcard

name  規則名稱

<condition name="host" operator="notequal">  當請求url中主機名不等於baidu.com時

<from>  攔截請求的url

<to> 需求重定向的url

原文連結:https://kailin.site/article/9
--------------------- 
作者:kalin0 
來源:CSDN 
原文:https://blog.csdn.net/a915305592/article/details/82194662?utm_source=copy 
版權宣告:本文為博主原創文章,轉載請附上博文連結!