[Apache]htaccess tricks

常常在其他網站看到一些沒有副檔名的網址,

其實這是可以用RewriteEngine做到的,

只要在網站根目錄新增一個.htaccess檔案

當每次使用者連進該網站時,都會根據.htaccess裡的RewriteRule(重寫規則)和RewriteCond(重寫條件)的組合來完成許多效果,
在.htaccess執行時會先判斷是否符合RewriteCond條件,若是符合就執行RewriteRule

另外有些條件模式可以配合使用
RewriteCond:
-d:判斷CondPattern是否為一個存在的目錄
-f:判斷CondPattern是否為檔案
-s:判斷CondPattern是否為檔案,且檔案大小大於0
-F:判斷CondPattern是否為檔案,且確認該檔案有存取權限
-U:判斷CondPattern是否為檔案,且確認該路徑有存取權限
[NC]代表不區分大小寫
[OR]邏輯判斷的OR

RewriteRule:
[R]重新轉向,預設會回傳Http response 302,也可以[R=301]調整成301
[F]禁止該URL,並回傳Http response 403
[G]該URL已永久無法使用,並回傳Http response 410
[L]該次RewriteRule到此結束,後續的RewriteRule就不受先前的RewriteCond影響

當然也有些常數可以使用,使用方法是%{NAME_OF_VARIABLE}
NAME_OF_VARIABLE可以是下列以下字串之一:
HTTP標頭
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
連接與請求
REMOTE_ADDR
REMOTE_HOST
REMOTE_PORT
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
Server
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
日期和時間
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
其他
API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ
HTTPS

在使用htaccess之前最好使用RewriteBase讓預設路徑在網站根目錄下,以免出現找不到網頁的結果

RewriteBase /

網址重寫

#啟動RewriteEngine
RewriteEngine On
#當輸入http://www.test.com.tw/aaaa時會執行index.php(規則可以使用正規表示法)
RewriteRule ^aaaa$ index.php
#當輸入1~5位的數字或英文字母時,會執行index.php?hash=輸入的字串($1為規則中第一組的正規表示法字串)
RewriteRule ^([a-zA-Z0-9]{1,5})$ index.php?hash=$1

禁止圖片盜連

RewriteEngine On
#這邊會使用到HTTP_REFERER,HTTP_REFERER是父頁面的URL,比如說從google.com搜尋到的頁面連過去網頁,該網頁的HTTP_REFERER就是google.com
#HTTP_REFERER 不等於 空值(HTTP_REFERER是空值代表Client是直接輸入網址連結,不是透過其他網頁連結過來)
RewriteCond %{HTTP_REFERER} !^$
#HTTP_REFERER 不等於 ecc.johnsonlu.org的domain(不是從ecc.johnsonlu.org這個domain連結過來的)
RewriteCond %{HTTP_REFERER} !^http://(www.)?ecc.johnsonlu.org/.*$ [NC]
#HTTP_REFERER 不等於 google.com的domain(不是從google.com這個domain連結過來的)
RewriteCond %{HTTP_REFERER} !^http://(www.)?google.com/.*$ [NC]
#以上條件若程立,又當副檔名是gif、jpg、swf、flv、png轉到error.png
RewriteRule .(gif|jpg|swf|flv|png)$ error.png [L]

禁止別人看到index目錄

Options -Indexes

Error404

ErrorDocument 404 error.php

[Ubuntu]查看硬體資訊

[Hadoop]PHP access HBase