2018年11月29日 星期四

Apache-.htaccess 改寫網址設定

#表示允許使用.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)