URL Rewrite 核心只需兩項技能:正則表達式 與 Web 服務器配置。掌握後可實現動態頁面靜態化展示、SEO 優化、隱藏真實參數等效果。
Rewrite.dll/ISAPI_Rewrite.dll)Rewritehttpd.ini 2.x / httpd.conf 3.x):
[ISAPI_Rewrite]
CacheClockRate 3600
RewriteRule ^(.*)/([a-z0-9A-Z\-]+\.html)$ $1/default.asp\?id=$2
關鍵正則符號:^ 行首、$ 行尾、\w 單詞字符、\s 空白、+ ≥1 次、* ≥0 次、[...] 字符集、(...) 分組捕獲httpd.conf,修改兩處:
AllowOverride None → AllowOverride All (允許 .htaccess 覆蓋)LoadModule rewrite_module modules/mod_rewrite.soapachectl restart.htaccess:
RewriteEngine On
RewriteRule ^([a-z0-9A-Z\-]+\.html)$ default.php\?id=$1
| 符號 | 含義 | 示例匹配 |
|---|---|---|
^ | 字符串開始 | ^abc 匹配 "abc..." |
$ | 字符串結束 | abc$ 匹配 "...abc" |
. | 任意單字符 | a.c 匹配 "abc", "axc" |
\w | 字母數字下劃線 | 等同 [a-zA-Z0-9_] |
\d | 數字 | 等同 [0-9] |
\s | 空白字符 | 空格、制表、換行 |
* | 零次或多次 | ab*c 匹配 "ac", "abc", "abbc" |
+ | 一次或多次 | ab+c 匹配 "abc", "abbc" |
? | 零次或一次 | ab?c 匹配 "ac", "abc" |
(...) | 捕獲分組 | 反向引用 $1, $2... |
(?:...) | 非捕獲分組 | 僅分組不捕獲 |
瀏覽器訪問 https://domain.com/test-123.html,應正確路由至 default.php?id=test-123 並能通過 $_GET['id'] 獲取參數。Apache 環境可用 RewriteLog 調試 (需配置日誌級別)。
現代部署建議:IIS 7+ 使用原生 URL Rewrite Module (配置web.config);Apache 2.4+ 優先使用<Directory>直接配置避免 .htaccess 性能損耗;Nginx 使用rewrite指令原生支持。