2008-12-21

apache 301 Redirect 永久重新導向

最近因為 Cookie 重複的問題花了不少時間
當 wacanai.com 及 www.wacanai.com 同時在一台主機上
用遊覽器瀏覽 www.wacanai.com 的網站時
會因為之前在 wacanai.com 所存的 Cookie 變數
當變數名稱重複時瀏覽器只會送出 wacanai.com 的變數
雖然這兩個 domain 在 DNS 上都是正確
但為了避免這樣的問題發生
一台主機最好不要同時擁有這兩種 domain

所以我利用 apache 中的 Rewrite 模組功能
作永久性的重新導向
在瀏覽時都導去 www.wacanai.com 這個網址

首先先確定 Rewrite 模組已經載入了
$ sudo a2enmod rewrite

Apache 還有一個重要的目錄設定就是:
<Directory /myblogroot/>
    AllowOverride FileInfo
    Options FollowSymlinks
</Directory>

如果沒有將這個設定加上
Rewrite 在啟用時會出現 http 403 的錯誤

可以利用 .htaccess 作以下轉址設定
RewriteEngine On
RewriteCond %{HTTP_HOST} ^wacanai\.com
RewriteRule (.*) http://www.wacanai.com/$1 [R=301,L]


參考網址:
301 Redirects & Canonical Redirects for Apache
Apache之AllowOverride參數詳解
2008-12-18

find 指令進階用法 [Linux]

find 指令結構
find [path] [expression]
[path]啟始路徑
[expression]查詢參數

基本參數
-name 以指定的範本搜尋檔案名稱
-iname 同上,但不區分大小寫
find . -name 'a*.jpg'
在當前目錄下搜尋開頭為 a 的圖片檔案

-path 以指定的範本搜尋檔案路徑
-ipath 同上,但不區分大小寫
find . -path '*pics/*pic_*.jpg'
在當前目錄下搜尋 ./pics/pic_01.jpg, ./01/pics/pic_a1.jpg, ./02/pics/01/pic_aa.jpg 這些檔案

-regex 以正規表示式搜尋檔案路徑
-iregex 同上,但不區分大小寫
find . -regex '.*pic_[0-9]+\.jpg'
在當前目錄下搜尋 pic_01.jpg, pic_03.jpg, pic_03.jpg 這些檔案

-type 搜尋檔案類型:一般檔案 (f),裝置檔案 (b,c),目錄(d),連結檔(l),socket(s),FIFO(p)
find . -type l
在當前目錄下搜尋所有連結檔

-size 搜尋檔案大小:byte(c),Kilobytes(k),Megabytes(M),Gigabytes(G)
find . -size 3k
在當前目錄下搜尋大小為(3kb)的檔案

find . -size +3k
在當前目錄下搜尋大於(3kb)的檔案

find . -size -3k
在當前目錄下搜尋小於(3kb)的檔案


時間參數
-mtime 搜尋檔案的修改時間(天)
-mmin 同上,以分鐘為單位
-ctime 搜尋檔案的建立時間
-cmin 同上,以分鐘為單位
-atime 搜尋檔案的最後開啟時間
-amin 同上,以分鐘為單位
find . -mtime 3
在當前目錄下搜尋3天時修改的檔案

find . -mtime +3
在當前目錄下搜尋3天前修改的檔案

find . -mtime -3
在當前目錄下搜尋3天內修改的檔案


帳戶參數
-user 搜尋指定帳戶名稱的檔案
-nouser 同上,但是搜尋非帳戶名稱的檔案(-not -user)
find . -user ftp
在當前目錄下搜尋使用者名稱為(ftp)的檔案

find . -nouser ftp
在當前目錄下搜尋使用者名稱非(ftp)的檔案

-group 搜尋指定群組名稱的檔案
-nogroup 同上,但是搜尋非群組名稱的檔案(-not -group)
find . -group ftp
在當前目錄下搜尋群組名稱為(ftp)的檔案

find . -nogroup ftp
在當前目錄下搜尋群組名稱非(ftp)的檔案

-perm 搜尋指定的檔案權限
find . -perm 744
在當前目錄下搜尋檔案權限為(744)的檔案

find . -perm +744
在當前目錄下搜尋檔案權限小於(744)的檔案,(600,444)

find . -perm -744
在當前目錄下搜尋檔案權限大於(744)的檔案,(744,774)

如果上面的指令你都會了,來點特別的吧!

邏輯處理
() 將搜尋條件優先處理,在使用上記得用'\'跳脫
-not 將搜尋條件反相
! 同上,在使用上記得用'\'跳脫
-and 邏輯的(和)
-a 同上
-or 邏輯的(或)
-o 同上

find . \(-user ftp -perm 744\) -or \(-group ftp\)
在當前目錄下搜尋
使用者名稱為(ftp)且權限為(744)的檔案

群組名稱為(ftp)的檔案

其他
-delete 將搜尋出來的檔案刪除
find . -user ftp -delete
刪除使用者名稱為(ftp)的檔案

-printf 將搜尋出來的結果以自訂格式輸出
find . -printf '%p\n'

-fprintf 將搜尋出來的結果以自訂格式輸出至文件
find . -fprintf a.txt '%p\n'

參考來源:
find - Linux Command - Unix Command
2008-12-06

離開頁面前的對話匡 window.onBeforeUnload 事件

在頁面改變前會觸發 window.onBeforeUnload 事件
但要怎麼產生出離開前的確認匡呢?
根據在 MSDN(onbeforeunload Event) 找到的說明
When a string is assigned to the returnValue property of window.event, a dialog box appears that gives users the option to stay on the current page and retain the string that was assigned to it. The default statement that appears in the dialog box, "Are you sure you want to navigate away from this page? ... Press OK to continue, or Cancel to stay on the current page.", cannot be removed or altered.

我們只要對這個事件 return 一個訊息就可以達成
除了 undefined 以外的所有值都會產生確認匡

那到底要怎麼做呢?
/*註冊事件*/
window.onbeforeunload = function(){
    return "是否要離開此頁面";
};

/*解除事件*/
window.onbeforeunload = null;


就這樣簡單的幾行就可以達成
真是簡單到不行
而且大多數的瀏覽器都支援

展示頁面(Demo Page)
2008-12-05

Wacanai 改版了

花了一個多月的時間
終於將新的版面上線了
除了版面上的改變外
這次也降低 JavaScript 的使用量
根據之前的經驗
太多的 JavaScript 只會讓瀏覽器當掉
在 CSS 樣式上的規劃也改善不少
當然也為了介面與功能配置上做了一些修改
雖然整體來說還不是很完整
但希望新的版面能讓使用者感覺更親切

我們的網站:www.wacanai.com