mod_rewrite()<?php
function mod_rewrite() {
global $_GET;
$nav = $_SERVER["REQUEST_URI"];
$script_name = $_SERVER["SCRIPT_NAME"];
// 移除腳本名稱部分,取得 PATH_INFO
$nav = substr(ereg_replace("^ $script_name", "", urldecode($nav)), 1);
// 移除尾部 .html / .htm
$nav = preg_replace("/^.ht(m){1}(l){0,1}$/", "", $nav);
// 以 / 分割成鍵值對
$vars = explode("/", $nav);
for ($i = 0; $i < count($vars); $i += 2) {
$_GET[$vars[$i]] = $vars[$i + 1];
}
return $_GET;
}
?>
訪問 URL:https://example.com/test.php/year/2006/action/_add.html
呼叫 mod_rewrite() 後,$_GET 將包含:
$_GET['year'] = '2006';
$_GET['action'] = '_add';
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
所有請求導向 index.php,由 PHP 內部解析 REQUEST_URI。
| 優點 | 缺點 |
|---|---|
| 無需修改 Apache 配置即可使用(僅需 .htaccess) | 所有動態請求經 PHP 處理,略增加開銷 |
| URL 結構靈活,利於 SEO | 需自行處理參數驗證與安全過濾 |
| 相容虛擬主機環境 | 靜態資源(圖片、CSS、JS)需排除 Rewrite |
PATH_INFO($_SERVER['PATH_INFO'])更標準化。rawurldecode()。