徽萬科技有限公司
服務(wù)項(xiàng)目產(chǎn)品
  • 抖音運(yùn)營服務(wù)
  • SEO 優(yōu)化服務(wù)
  • 愛采購
  • 網(wǎng)站搭建
  • 微信小程序開發(fā)
  • 企業(yè)官網(wǎng)開發(fā)
  • 商城網(wǎng)站開發(fā)
  • 微傳單設(shè)計(jì)
  • 教育系統(tǒng)開發(fā)
  • 云設(shè)計(jì)
400-088-8563
新聞詳情

企業(yè)官網(wǎng)301重定向的編寫及更改

22
發(fā)表時(shí)間:2021-03-03 18:22作者:蕪湖網(wǎng)絡(luò)推廣

實(shí)現(xiàn)重定向有許多可能的方法,在Apache網(wǎng)絡(luò)服務(wù)器上(通常作為操作系統(tǒng)呈現(xiàn)在運(yùn)行UNIXLinux的機(jī)器中),我們能夠在一個(gè)名為.htacess的標(biāo)準(zhǔn)文件中使用RedirectRedirectMatch指令輕松地進(jìn)行重定向。另外,你還可以使用一些稱為rewire rules的高級(jí)指令,使用稱為mod_rewriteApache組件進(jìn)行重定向,我們稍后將對(duì)此進(jìn)行講解。

在運(yùn)行Microsoft IIS的網(wǎng)絡(luò)服務(wù)器中,提供了多種執(zhí)行重定向的方法。正如我們?cè)?/span>“IIS Redirects-301,302”中所描述的那樣,最基本的方法是使用IIS控制臺(tái)。具有IIS服務(wù)器的用戶還可以使用一個(gè)帶有指令的文本文件,假設(shè)他們使用ISAPI插件,如ISAPI_Rewrite,這一腳本語言具有與Apache mod_rewrite組件相類似的功能。

許多程序員會(huì)使用其他的技巧執(zhí)行重定向,如直接在程序語言中運(yùn)行,如Perl、PHP、ASPJavaScript。如果以這種形式運(yùn)行重定向,那么程序員必須確保網(wǎng)絡(luò)服務(wù)器返回的HTTP狀態(tài)碼是301。你可以使用Firefox插件Live HTTP Headers、Chrome擴(kuò)展或基于網(wǎng)絡(luò)的服務(wù)器標(biāo)題檢測(cè)工具檢查返回的標(biāo)題。

另外一種執(zhí)行重定向的方法是在頁面層面通過使用元refresh標(biāo)簽執(zhí)行的,該標(biāo)簽看起來像下面這樣:在content部分的第一個(gè)參數(shù)5表示網(wǎng)絡(luò)服務(wù)器在將用戶重定向至指定頁面前需等待的時(shí)間,發(fā)布者可能會(huì)使用這一方法展示頁面,讓用戶知道他們將被重定向至一個(gè)與其目標(biāo)頁面不同的頁面。

但問題是,大部分元新標(biāo)簽都會(huì)被看作302重定向,唯一的例外情況是你將重定向延遲設(shè)置為0秒。你需要放棄能夠告知用戶你在進(jìn)行重定向的幫助頁面,但搜索引擎可能會(huì)把它看作301重定向(為安全起見,最好的做法是盡量使用301重定向)。

網(wǎng)址重寫和重定向的mod_rewriteISAPI_Rewrite

對(duì)于該話題,有大量的內(nèi)容可寫,本書僅呈現(xiàn)一部分。下面的描述僅是一個(gè)簡單的描述,旨在幫助一些包括網(wǎng)絡(luò)設(shè)計(jì)者和網(wǎng)站管理者在內(nèi)的專業(yè)人員了解重寫和重定向是如何運(yùn)行的。要跳過這一技術(shù)性話題,如何在無循環(huán)的情況下重定向主頁索引文件。

Apachemod_rewriteMicrosoft IIS服務(wù)器的ISAPI_Rewrite均為網(wǎng)址重寫提供了很好的途徑,使用這些工具的原因如下:

你已經(jīng)改變了網(wǎng)站中的網(wǎng)址結(jié)構(gòu),所以內(nèi)容也從一個(gè)位置移動(dòng)到了另一個(gè)位置,當(dāng)你出于某些原因而改變CMS或網(wǎng)站體制時(shí),便會(huì)出現(xiàn)這種情況。

你想將一些不適應(yīng)搜索引擎的網(wǎng)址替換為搜索引擎友好型網(wǎng)址。

如果你將Apache作為自己的網(wǎng)絡(luò)服務(wù)器,那么你會(huì)在.htaccess文件或Apache配置文件中放置一個(gè)稱為rewrite rules的指令(如sites_conf目錄中的httpd.conf或站點(diǎn)特定的配置文件)。同樣地,如果你使用的是IIS服務(wù)器,那么你會(huì)使用一個(gè)ISAPI插件,如ISAPI_Rewrite,而將規(guī)則放在httpd.ini配置文件中。

需要注意的是,ISAPI_Rewritemod_rewrite的規(guī)則可能有所不同,而下面的討論主要圍繞mod_rewrite展開,你的.htaccess文件可能這樣開頭:

如果你要將rewrite添加到服務(wù)器配置文件中,則需要?jiǎng)h除第二行,因?yàn)橹挥?/span>.htaccess支持RewriteBase。我們?cè)谶@里使用的是RewriteBase,這樣你便不需要在所有規(guī)則的開頭都輸入^/,而只要輸入^即可(我們稍后會(huì)介紹正則表達(dá)式)。

完成這一步之后,重寫規(guī)則便會(huì)被運(yùn)行,或許你要求在不改變用戶瀏覽器位置欄的網(wǎng)址和不重新編碼get_product.php腳本的情況下,http://www.yourdomain.com/products/123格式下的產(chǎn)品頁面網(wǎng)址能夠顯示http://www.yourdomain.com/get_product.php?id=123中的內(nèi)容。當(dāng)然,這不能取代所有出現(xiàn)在網(wǎng)站頁面鏈接中的動(dòng)態(tài)網(wǎng)址,那屬于另一個(gè)話題范圍了。你可以使用一個(gè)簡單的重寫規(guī)則實(shí)現(xiàn)第一部分的要求,類似于:

這個(gè)例子告訴網(wǎng)絡(luò)服務(wù)器所有進(jìn)入/product/目錄的搜索請(qǐng)求都應(yīng)被映射到/get_product.php請(qǐng)求,同時(shí)使用/product/的子文件夾作為PHP腳本的參數(shù)。

^符號(hào)表示域名網(wǎng)址的開頭,$符號(hào)表示網(wǎng)址的結(jié)尾,[0-9]表示數(shù)位,而緊隨其后的+符號(hào)表示數(shù)位的一次或多次出現(xiàn)。同樣地,/后面的?表示斜杠符號(hào)出現(xiàn)0次或1次,()符號(hào)會(huì)記住所有括號(hào)內(nèi)的內(nèi)容,之后,你可以使用$1訪問緩存中的內(nèi)容(如,第一組括號(hào)內(nèi)的全部內(nèi)容)。不足為奇的是,如果規(guī)則中包含第二組括號(hào),那么你可以使用$2訪問第二組括號(hào)的所有內(nèi)容,依次類推。[L]標(biāo)志保存在服務(wù)器進(jìn)程中,指示重寫引擎一旦匹配該規(guī)則便停止運(yùn)行,否則,所有剩下的規(guī)則就會(huì)被運(yùn)行。

下面是一個(gè)稍微復(fù)雜點(diǎn)的例子,http://www.yourdo-main.com/webapp/wcs/stores/servlet/ProductDisplay?storeId=10001&catalogId=10001&langId=-1&categoryID=4&productID=123格式的網(wǎng)址將被重寫為http://www.yourdomain.com/4/123.htm

[^/]表示除了斜線之外的任一符號(hào),這是因?yàn)?/span>^在方括號(hào)內(nèi)被理解為不。[QSA]標(biāo)志是表示你不希望搜索請(qǐng)求字符串被緩存(就像你不希望追蹤參數(shù)被保存一樣)。

要撰寫優(yōu)質(zhì)的重寫規(guī)則,你需要變成一個(gè)模式匹配大師(這是描述正則表達(dá)式功能的另一種方式),下面列舉一些最重要的特殊符號(hào)及重寫引擎對(duì)這些符號(hào)的解讀。

*:當(dāng)前字符匹配0次或n次。

+:當(dāng)前字符匹配1次或n次。

?:當(dāng)前字符出現(xiàn)0次或1次。

^:字符串的開始。

$:字符串的結(jié)尾。

.:任意符號(hào)(如作為通配符)。

\避開后面的字符,如\.表示點(diǎn)不是一個(gè)通配符而是一個(gè)實(shí)際的字符。

^:在[]括號(hào)內(nèi)表示非,例如,[^/]表示非斜杠。

在正則表達(dá)式中,輕易便會(huì)犯下錯(cuò)誤,一些常見的、導(dǎo)致無意子字符串匹配的錯(cuò)誤包括如下:

·在應(yīng)該使用.+的地方使用了.*(因?yàn)?/span>.*什么都不匹配)。

·沒有使用反斜杠換碼一個(gè)你不想表達(dá)的特殊符號(hào),因?yàn)楫?dāng)你指定.代替\.時(shí),你確實(shí)指的是點(diǎn)這個(gè)符號(hào)而不是任意字符(因此,default.htm會(huì)匹配defaultthtm,而default\.htm會(huì)只匹配default.htm)。

·在開頭或結(jié)尾通過隱含方式確定的前提下,省略^$(因此,default\.htm會(huì)匹配mydefault.html,而^default\.htm$只匹配default.htm)。

·使用貪婪表達(dá)式,匹配所有出現(xiàn)的次數(shù)而不是在第一次出現(xiàn)之后停止。

·詮釋貪婪最簡單的方式是給出一個(gè)例子:

該表達(dá)式將重定向所有從http://www.yourdomain.com/blah/index.htmlhttp://www.yourdomain.com/blah/的請(qǐng)求,這可能并不是其本意,但為什么會(huì)出現(xiàn)這種情況?因?yàn)?/span>.*會(huì)在/?看到斜線符號(hào)之前將其采集,謝天謝地,我們有一個(gè)簡單的解決方案。使用[^.*?代替.*來進(jìn)行匹配,例如,使用^.*?)/?代替^.*)/?,或使用[^/]+/[^/]代替./.*。

因此,要改正上述規(guī)則,你可以使用以下表達(dá)式:

為什么不用下面這個(gè)呢?它比較有限,因?yàn)樗荒芷ヅ浒粋€(gè)目錄的網(wǎng)址,而包含多個(gè)子目錄的網(wǎng)址則不能匹配,如http://www.yourdomain.com/store/cheese/swiss/wheel/index.html。

你可能也想過,測(cè)試或調(diào)試應(yīng)是網(wǎng)址重寫中比較重要的部分,當(dāng)你進(jìn)行調(diào)試時(shí),RewriteLogRewriteLogLevel指令便是你最好的伙伴!將RewriteLogLevel設(shè)置為4或以上值,然后查看重寫引擎在詮釋你的規(guī)則時(shí)會(huì)做什么。

順便說一下,在后面幾個(gè)例子中的[R=301]標(biāo)志——你可能也猜到了——是告訴重寫引擎進(jìn)行301重定向而不是標(biāo)準(zhǔn)的重寫。

還有另外一個(gè)與RewriteRule連用的指令,稱為RewriteCond。你可能會(huì)使用RewriteCond匹配搜索請(qǐng)求字符串中的內(nèi)容、域名或其他未出現(xiàn)在域名和網(wǎng)址問號(hào)之間的元素(這正是RewriteCond所關(guān)注的內(nèi)容)。

需要注意的是,RewriteRuleRewriteCond都不能訪問網(wǎng)址錨節(jié)點(diǎn)中的內(nèi)容——即#后面的內(nèi)容,因?yàn)樵摬糠謨?nèi)容本質(zhì)上是被瀏覽器所用的,是不會(huì)被作為請(qǐng)求的一部分發(fā)送到服務(wù)器的。下面的RewriteCond案例是在其允許執(zhí)行重寫規(guī)則之前,尋找一個(gè)正面匹配的主機(jī)名:

注意正則表達(dá)式開頭的感嘆號(hào),重寫引擎把它理解為非。

對(duì)于除了http://www.yourdomain.com之外的任何一個(gè)主機(jī)名來說,301重定向相當(dāng)于www子域名中的標(biāo)準(zhǔn)網(wǎng)址。[NC]標(biāo)志使重寫條件區(qū)分大小寫。你可能會(huì)問,保存搜索請(qǐng)求字符串的[QSA]標(biāo)志去哪兒了?重定向不需要它,它是隱含的。

如果你不希望搜索請(qǐng)求字符串留存在含有重定向的重寫規(guī)則中,那么可以在規(guī)則中的目標(biāo)網(wǎng)址末端添加一個(gè)問號(hào),類似于:

為什么不用^yourdomain\.com$?想一下:該表達(dá)式不匹配typo域名,如yourdoamin.com,DNS服務(wù)器和虛擬主機(jī)將被設(shè)置為響應(yīng)typo域名(假設(shè)錯(cuò)誤拼寫是一個(gè)你注冊(cè)和擁有的域名)。

在什么情況下,你會(huì)希望從重定向的網(wǎng)址中省略搜索請(qǐng)求字符串,如我們?cè)谏厦鎯蓚€(gè)例子中那樣呢?當(dāng)會(huì)話ID或追蹤參數(shù)(如source=banner_ad1)需要被放棄時(shí)。沒有必要在重定向之后保留追蹤參數(shù)(因?yàn)榘创a的原始網(wǎng)址在被訪問之后,會(huì)被記錄到訪問日志文件中),而且從規(guī)范化角度來看,你也沒必要那樣做。如果你希望從重定向的網(wǎng)址中刪除追蹤參數(shù),但同時(shí)又想保留搜索請(qǐng)求字符串中的其他參數(shù),你應(yīng)該怎么做呢?下面是針對(duì)靜態(tài)網(wǎng)址的做法:

而對(duì)于動(dòng)態(tài)網(wǎng)址:在重定向用戶之前,需要用cookie做一些奇妙的事情嗎?調(diào)用一個(gè)跟蹤用戶的腳本,然后301重定向該用戶至標(biāo)準(zhǔn)網(wǎng)址:

注意上述代碼中沒有[R=301]標(biāo)志,這是故意的,因?yàn)闆]有必要將該腳本展示給用戶,該腳本完成它的使命之后,使用重寫,讓它自己發(fā)送301重定向。

其他值得用重寫規(guī)則和[R=301]標(biāo)志修改的標(biāo)準(zhǔn)化問題包括:搜索引擎索引HTTPS網(wǎng)址下的在線目錄頁面時(shí)及網(wǎng)址漏掉一個(gè)本應(yīng)有的尾斜杠時(shí)。首先,HTTPS解決方案是:

需要注意的是,如果你的安全服務(wù)器與主服務(wù)器分離,那么你可以跳過RewriteCond行。

現(xiàn)在添加尾斜杠:

完成網(wǎng)址重寫工作,將動(dòng)態(tài)網(wǎng)址替換成靜態(tài)網(wǎng)址之后,你可能想逐步淘汰動(dòng)態(tài)網(wǎng)址,你可能會(huì)替代網(wǎng)站中所有出現(xiàn)的遺留網(wǎng)址,也可能會(huì)使用301重定向遺留的動(dòng)態(tài)網(wǎng)址至其靜態(tài)對(duì)應(yīng)頁面。這樣一來,所有指向廢棄網(wǎng)址的導(dǎo)入鏈接便不會(huì)再引導(dǎo)搜索爬蟲和人類用戶進(jìn)入正確的新網(wǎng)址——因此,確保新的網(wǎng)址是被索引、引用、鏈接和標(biāo)記的,而將原有網(wǎng)址從索引中刪除。通常來講,下面是你的做法:

不過,如果你不小心,便可能會(huì)陷入無限循環(huán)重定向的怪圈,避免該局面的一個(gè)應(yīng)急方案是在重寫的目標(biāo)網(wǎng)址中添加一個(gè)無意義的參數(shù),而且要確保這個(gè)無意義的參數(shù)不會(huì)在你進(jìn)行重定向之前出現(xiàn),具體是:需要注意的是,該案例使用了兩個(gè)堆在一起的RedirectCond行,在同一區(qū)塊中列出的所有重定向條件都是“ANDed”(并列)一起的,如果你希望條件是“Ored”,那么你需要使用[OR]標(biāo)志。


分享到:
安徽萬澤科技有限公司
產(chǎn)品服務(wù)
解決方案
精選套餐
服務(wù)支持
產(chǎn)品概述
常見問題
合作加盟
渠道分銷
基礎(chǔ)設(shè)施
產(chǎn)品配置
聯(lián)系我們
入門指南
亚洲精品毛片一区二区三区| 国产999精品成人网站| 欧美性猛交xxxx乱大交丰满| 乱子伦av无码中文字幕| 国产精品一二三区视在线| 日本伊人色综合网站| 高清无码不卡视频| 香蕉久久国产超碰青草| 欧洲熟妇色 欧美| 亚洲国产日韩欧美综合a| av亚洲在线一区二区| 成人午夜在线播放| 国产日产亚洲系列av| 亚洲国产一区二区三区久| 国产精品XXXX国产喷水| 中文字幕少妇AV| 中文乱幕日产无线码| 国产aaaaa一级毛片| 欧日韩在线不卡视频| 高中女无套中出17p| 亚洲av日韩av永久无码电影| 日本一道一区二区视频| 成人免费无码视频在线网站| 亚洲成AV人在线播放无码| 中文字幕国产精品综合| 精品国产肉丝袜久久首页| 亚洲综合网一区二区三区| 幺女国产一级毛片| 中文字幕无码成人免费视频| 久久中文字幕无码一区二区| 中文字幕不卡在线播放| 99久久国产综合精品女同图片| 亚洲精品久久久久午夜福禁果tⅴ| 亚洲精品视频自拍偷拍| 日本熟妇色一本在线观看| 婷婷六月天在线| 欧美日韩另类国产| 天天爽夜夜爱| 欧美日韩一区二区三区色综合| 天天狠天天透天干天天怕| 免费一区二三区三区蜜桃|