查看了 discuz 的 drerferer 方法. 發現它不允許跳轉到不同子域名的跳轉.
如果想跳轉, 可以修改這個方法, 允許. 但是這樣處理會在以後升級時, 又得要修改. 比較麻煩.

想一下,discuz 這樣處理, 簡單的個人理解, 就是假設有人想幹幹事. 那在某個位置放置一個跳轉到其它網站上的 url, 然後再把這個網站仿得跟之前使用
的那個"正版"網站一樣, 就可以達到騙取密碼之類的目的了. 所以這是比較危險. 或者這個方式還有更加多的利用. 所以. 它做了這個防止.
現在我要説的是使用一個不變動的方式來增加跳轉功能.

在 discuz 的根目錄下放置一個:referer.htm 文件. 內容如下, 主要是為了能跳過去. 且在這個文件中做一個跳的域名的判斷. 不符合就簡單的跳到首頁, 因為? 號會導致服務嘗試查詢解析, 所以就不用了. 還是用 hash 吧.

複製代碼

代碼如下:

<script>
/* by qidizi: discuz 不允許跳轉到其它域名, 現使用 js 處理, 減少修改的工作量, 允許跳到同頂域--不能跳到其它域, 防止仿站之類的欺騙*/
(function(){
var topDomain = location.host.split('.');
topDomain = topDomain[topDomain.length-2]+'.'+topDomain[topDomain.length-1];
if (location.hash.length < 3) return location = 'http://' +location.host + '/';
var referer = unescape(location.hash.replace(/#/g, '').replace('%_', '%'));
if (new RegExp('^http://([^/]+.)?' +topDomain+ '/', 'i').test(referer)) {//同 top domain
location = referer;
} else {
location = 'http://' +location.host + '/';
}
})();
</script>

使用方式如下. 使用 js 生成的一個退出鏈接, 點擊退出成功再會退出當前的這個頁面. 這樣這個目的就達到了.
+
' <a
href="http://bbs.qidizi.net/member.php?mod=logging&action=logout&formhash='
+json['formHash']+ '&referer=/referer.htm' +escape('#')
+escape(location).replace(/%/g, '%_')+ '"
target="_self"> 退出</a>'
ok, 經過測試. 此方案工作正常