淺談301,404,500

[color=red]先說301[/color]
網站上線一個星期不到,在google和百度發現網站被盜鏈,
即在google搜索 自己的網站,在第一頁發現被收入,但是鏈接地址不是自己的網站地址。
經過分析得出,該域名解析到我們的網通,(在其他搜索引擎也發現幾個不同域名解析到我們網站,先不說是怎麼回事)
這樣導致的結果是google同時收入多個域名下的我們網站,分散掉我們網站被搜索引擎的收入量,同時會誤導用戶對我們域名的記憶。
解決辦法:
1.寫個過濾器

String referrer = request.getHeader("referer");
String sitePart = "http://" + request.getServerName();
if (null == referrer || referrer.startsWith(sitePart)) {
// 處理正當的訪問請求,進行後續操作。
...
}
else {
//非法訪問請求跳轉到本站的提示頁面
...
}

2.通過apache來控制
實現方式很簡單,只要修改httpd.conf相關代碼就可以了,如下:

<VirtualHost *.*.*.*:80>
ServerName *.*.*.*
DocumentRoot "/var/www/nosite"
...
Redirect permanent / http://www.ourdomain.com/
<Directory "/var/www/nosite">
...
</Directory>
</VirtualHost>

方法1對每個請求都會判斷下,降低訪問速度,同時要在每個頁面返回301
方法2不需要手動加代碼來實現跳轉,能返回301狀態,同時能做到把之前被收入的其他域名下的鏈接轉換到自己域名下面。
故採用方法2,參考網上新舊域名的轉換需要轉換,但,我們是被多個域名盜鏈,也不知道以後會冒出什麼其他域名來
在方法2中,ServerName後面跟的是自己的IP而不是自己的域名(網上寫的是自己的olddomain),需要注意的是Redirect permanent / http://www.ourdomain.com/
這句。這裏不需要寫正則,經過測試,完全通過,同時都返回301狀態

[color=red]淺談404[/color]
參考幾個大的網站,發現404頁面返回的狀態都是404(百度除外,返回的是302,可見百度對自己的細節也不是非常的重視,不過百度的404頁面做的很人性化)

[quote]從理論上說,對302錯誤,搜索引擎認爲該網頁是存在的,只不過臨時改變了地址,仍然會索引收錄該頁,這樣,同樣會出現類似於200狀態碼時的重複文本問題;其次,以google爲代表的主流搜索引擎對302重定向的適用範圍要求越來越嚴格,這類不當使用302重定向的情況存在很大的風險。

確保自定義404錯誤頁面能夠返回404狀態碼

在自定義404錯誤頁面設置完畢後,一定要檢查一下其是不是能夠正確地返回404狀態碼。可以使用Server Header檢查工具,輸入一個不存在網頁的url,查看一下HTTP Header的返回情況,確信其返回的是404 Not found。[/quote]
配置404很簡單,jsp不需要在出錯頁面返回404狀態,只需在web.xml統一配置下就OK了

<!-- 404 頁面不存在錯誤 -->
<error-page>
<error-code>404</error-code>
<location>/common/404.html</location>
</error-page>
<!-- 500 服務器內部錯誤 -->
<error-page>
<error-code>500</error-code>
<location>/common/500.html</location>
</error-page>
<!-- java.lang.Exception異常錯誤,依據這個標記可定義多個類似錯誤提示 -->
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/common/error.jsp</location>
</error-page>

這裏順便把500和異常處理了,好處就是不把程序的異常拋出給用戶,隱藏掉

如果你使用的是struts2,針對異常錯誤或請求還可以在struts.xml這樣配置

<package name="test" namespace="/" extends="struts-default">
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception">
</exception-mapping>
</global-exception-mappings>
<action name="index" class="indexAction">
<result name="success">/jsp/index.jsp</result>
</action>
</package>

注意:<global-exception-mappings>必須在action之前配置
result="error"在<global-results>配置的出錯頁面

怎麼查看headers?
推薦使用firefox+firebug
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章