#表示允許使用.htaccess文檔重寫URL
AllowOverride All
#/表示允許在此目錄使用符號連接
Options FollowSymLinks
#開啟Rewrite功能
RewriteEngine On
RewriteBase /
#沒有參數,最簡單改寫
RewriteRule ^shorturl original.php
TYPE in Browser :
http://yourdomain/shorturl
Equal to :
http://yourdomain/original.php
#有參數
RewriteRule ^shorturl/([0-9]+)-(.*) original.php?id=$1&name=$2
^shorturl/ 是一個正規表示式,代表只要請求的 URL 中有 shorturl/ 就算符合
([0-9]+) 表示 ^shorturl/ 以後的數字
(.*) 表示 ^shorturl/ 以後的字串
$1 表示將 ^shorturl/ 以後的任何數字 ([0-9]+),接在 id= 後面
$2 表示將 ^shorturl/ 以後的任何字串 (.*) ,接在 name= 後面
([0-9]+): 表示參數值為數字
([a-z]+): 表示參數值為英文
(.*) : 表示參數萬用字元(可接受中文字)
. 任何單一字母
? 0個或是1個字母
* 0個或是N個字母
+ 1個或是N個字母
^ 表示一行的開始
$ 表示一行的結束
\ 跳脫字元(顯示符號本身)
[NC] (不分字母大小寫)
[NE] (不再輸出轉義特殊字符)
[OR] (或者, 用來與下一規則連結用)
[R] 重新導向
[F] 重新導向到 403 forbidden 頁面
[G] 重新導向到 410 forbidden 頁面
[P] 強制使用代理
[N] 重新從第一條規則開始運行
[L] 表示這是最後一條規則
例子 : original.php
<?php
$id = $_GET['id'];
$name = $_GET['name'];
?>
<!doctype html>
<html debug="true" lang="utf-8">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<h1>This is the shorturl test.</h1>
<p>id: <span><?php echo $id; ?></span></p>
<p>name: <span><?php echo $name; ?></span></p>
</body>
</html>
TYPE in Browser :
http://yourdomain/shorturl/777-goodnumber
Equal to :
http://yourdomain/original.php?id=777&name=goodnumber
#.htaccess 分為兩部份解釋
1. 如果只是要用 .htaccess 的功能
a. apache config file 中的 <Directory>AllowOverride 要設為 All
<Directory "absolute path">
AllowOverride All
</Directory>
b. .htaccess 中加上 Indexes 即可瀏覽目錄
2. 如果想要改寫網址
a. apache config file 中 的 mod_rewrite 要打開(ps 不同的Linux distributions開法不同 opensuse 要改/etc/sysconfig/apache2 php5 後面加 rewrite)
b. .htaccess 中加上 FollowSymLinks RewriteEngine On
(RewriteRule index.php test.php)