seo建站優化之URLrewrite
前言:
UrlRewrite就是我們通常說的地址重寫,用戶得到的全部都是經過處理後的URL地址。
**
01
**
一:提高安全性,可以有效的避免一些參數名、ID等完全暴露在用戶面前,如果用戶隨便亂輸的話,不符合規則的話直接會返回個404或錯誤頁面,這比直接返回500或一大堆服務器錯誤信息要好的多
二:美化URL,去除了那些比如*.do之類的後綴名、長長的參數串等,可以自己組織精簡更能反映訪問模塊內容的URL
三:更有利於搜索引擎的收入,通過對URL的一些優化,可以使搜索引擎更好的識別與收錄網站的信息
四:可以很方便的重用,提高網站的移植性。如果我們後臺方法改動的話,可以保證前臺的頁面部分不用改。這樣就提高了網站的移植性。
缺點: 因爲它是通過過濾器原理來實現的,就意味着又多了一道訪問,會多少影響點訪問速度的,這個可以忽略不計的。
使用範圍
地址重寫一般是用於將動態地址僞靜態。如果本身就是靜態就沒必要了。地址重寫後網站製作者可以通過輸入地址名直接訪問。
02
使用方法
第一步:添加maven依賴或下載urlrewritefilter.jar直接到你的 web - inf / lib 目錄中。
maven依賴:
<dependency>
<groupId>org.tuckey</groupId>
<artifactId>urlrewritefilter</artifactId>
<version>4.0.4</version>
</dependency>
ps:如果你直接複製到的pom.xml,可能會報這個錯
pom.xml mvn package expected START_TAG or END_TAG not TEXT
解決辦法:
下載jar
官方地址:http://tuckey.org/urlrewrite/
下載urlrewritefilter-4.0.3.jar,加入到工程lib目錄下。
第二步:在web.xml中加入如下配置,進行初始化:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
第三步:在WEB-INF目錄下建一個urlrewrite.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.1//EN"
"http://tuckey.org/res/dtds/urlrewrite3.1.dtd">
<urlrewrite>
<rule>
<!--攔截頁面以xxx開頭的數據,作爲轉發給前端使用,以^開頭$結束-->
<from>^xxx$</from>
<!-- to: 真實的URL -->
<to></to>
</rule>
<!-- 上一個<rule></rule>爲示例 -->
<rule>
<from>^/vweb/view/index\-([0-9]+)$</from>
<to>/vweb/view/index.shtml?_vwebid=$1&type=show</to>
</rule>
</urlrewrite>
簡單的介紹一下常用的正則表達式:
. 匹配除換行符以外的任意字符
\w 匹配字母或數字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數字
\b 匹配單詞的開始或結束
^ 匹配字符串的開始
$ 匹配字符串的結束
常用的&要用 &來表示。$1,$2代表與你配置正規表達式/(\w+)/(\w+)/相對應的參數。
中的type有兩個值,默認的是 type=“forward”.連接外部的網站時用type=“redirect”。
<rule>
<from>^/rss/yahoo\.html$</from>
<to type="redirect">http://add.my.yahoo.com/rss? url=http://feed.feedsky.com/MySiteFeed[/url]
</to>
</rule>
**
03
**
**
springboot項目配置urlrewriteFilter
**
這第一步好像沒什麼好說的,使用urlrewriteFilter自然要引入依賴的jar包.(前文已經說到,這裏不做贅述)
第二步,配置過濾器
package com.llf.springboot.controller;
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 UrlRewriteConf 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(), "@@traceability@@");
checkConf(conf);
} catch (IOException ex) {
throw new ServletException("Unable to load URL rewrite configuration file from " + URL_REWRITE, ex);
}
}
}
附:網上關於springboot的過濾器的寫法大概有三類,感興趣的可自行百度,這裏就不提供了
特別需要注意的是:
confPath的作用是,指定URLRewrite配置文件的位置,默認在WEB-INF下,但是我使用的內嵌式的服務器,所以是沒有這個目錄的,爲了解決這個問題,
我可是翻了不少的地方,直接寫配置文件名稱,表示該文件在類加載路徑下.如果你是maven構建的項目,那就是resource下.
這個也比較好理解的.
但是有一點需要注意的是,如果打的不是war包而是jar包的話,那麼指定confPath參數是沒有作用的,因爲它讀取不到你的配置文件.
配置urlrewrite.xml
同上
這裏可以添加多條攔截規則,每一條攔截規則使用rule標籤包裹.
這裏沒有特別需要注意的地方.
如果只是簡單的使用的話,記住下面這一點就足夠了.
首先,如果你會用正則表達式的話,可以通過正則表達式來處理,如果不會,可以使用通配符.
<from>^/(\w+)/_([\w\d])+\.html$</from>
<!-- to: 真實的URL -->
<to type="forward">/$1.html?param=$2</to>
控制檯出現以下信息表示加載成功
效果預覽圖
個人博客:知兮寒兮
技術交流羣:752561537
微信掃一掃關注該公衆號獲取更多資料
個人小程序:知兮寒兮