Apache服務(wù)器的RewriteMap_Web服務(wù)器教程
在apache的環(huán)境下,rewrite還真是生活之友啊,時不時就得用上。前些日子有個需求,要將url重新轉(zhuǎn)一轉(zhuǎn)。
什么情況?
原來的url
http://www.xxx.com/demo/oldpage.php?param1=1¶m2=2
轉(zhuǎn)換后的url
http://www.xxx.com/newpage.php?url=%2Fdemo%2Fmypage.php%3Fparam1%3D1¶m2%3D2
需要把粗體部分的url進行urlencode,能看出上面的字符"?&="都分別轉(zhuǎn)義過,作為參數(shù)發(fā)給另外一個url。那么這時候請出rewrite還真是最合適不過了。
坎坷的Rewrite經(jīng)歷
查查rewrite手冊,俺這才知道,轉(zhuǎn)義這活,非得派出RewriteMap的map function才能做的比較漂亮�,F(xiàn)在只有四個內(nèi)部map function可供差遣:
- toupper: Converts the key to all upper case.
- tolower:
- Converts the key to all lower case.
- escape: Translates special characters in the key to hex-encodings.
- unescape: Translates hex-encodings in the key back to special characters.
那么很快就有了第一個rewrite出現(xiàn):
RewriteMap escape int:escape
RewriteRule ^/([^/]*)$ /newpage.php?mi_url_suffix=${escape:$1?%{QUERY_STRING}} [L,PT]
注:這里的int不是intger的意思,它是internal的縮寫,表示調(diào)用內(nèi)部函數(shù)。
看上去非常簡單,跑起來貌似也正....常?且慢,俺打開RewriteLog一瞅,形式不容樂觀啊,"&"字符通通沒有轉(zhuǎn)義�?磥硎鞘×�,爬到狗狗上翻了一下,貌似escape對"?="之類的特殊字符是不做轉(zhuǎn)義的,暈。
RewriteMap到底
接著細看apache的rewrite手冊,發(fā)現(xiàn)RewriteMap還支持自定義腳本,那么還得使出俺的看家絕技——php了。首先弄一個能轉(zhuǎn)義的php,必須非常簡單,復(fù)雜了apache容易掛掉,寫出來發(fā)現(xiàn)想復(fù)雜都挺難啊:
/usr/local/bin/escape.php
-
#!/usr/bin/php -f
-
<?php
-
while($in = trim(fgets(STDIN)))
-
fputs(STDOUT, urlencode($in) . "\r\n");
-
?>
在這個腳本里可別使用php:://stdin之類的,具體原因查php手冊。相應(yīng)的,rewrite規(guī)則如下:
RewriteMap escape prg:/usr/local/bin/escape.php
RewriteRule ^/([^/]*)$ /newpage.php?mi_url_suffix=${escape:$1?%{QUERY_STRING}} [L,PT]
rewrite規(guī)則沒有太大的改變,prg表示使用自定義腳本�,F(xiàn)在這個版本總算正常運作了。
- 推薦!各類建站程序偽靜態(tài)規(guī)則代碼
- 詳細的DedeCMS(織夢)目錄權(quán)限安全設(shè)置教程
- iis安全設(shè)置全方位教程
- 巧妙出招致勝服務(wù)器管理
- Win Server 2003個人網(wǎng)絡(luò)服務(wù)器安全攻略
- Windows 2003校園Web服務(wù)器常見問題
- 清除IIS配置文件后門隱患
- Web服務(wù)器和應(yīng)用程序服務(wù)器有什么區(qū)別
- 虛擬主機下asp.net 2.0的導(dǎo)航控件treeview,menu等出錯
- IIS6.0服務(wù)器架站無法訪問解決方案總結(jié)
- 圖解支持多語言環(huán)境的IIS服務(wù)器配置
- IIS服務(wù)器排錯指南及錯誤代碼大全
- 相關(guān)鏈接:
- 教程說明:
Web服務(wù)器教程-Apache服務(wù)器的RewriteMap
。