使用apache的rewrite技術做php專案中需要用到url重定向技術,基本上的需求就是把比如 /user/heiyeluren 重定向到 /user.php?uid=heiyeluren 之類的url上,當然,你也可以把 /article/200707291011.html重定向到 /article.php?id=200507291011 之類的,模擬好像是靜態頁面,能夠隱藏url真實位址,有助於雨鞋基本的安全防範等等。那麼好像rewrite是個很好的解決辦法。
要在apache裡執行rewrite的話,必須先安裝mod_rewrite的元件,就是乙個mod_rewrite.c檔案,然後必須在./configure的時候要放上mod_rewrite就能安裝。
一般配置rewrite的話,可以在httpd.conf裡面配置,也能在網頁當前目錄的.htaccess檔案裡進行定義來決定重定向去那個檔案,那樣的話,就非常具有靈活性了,同樣也能夠適合虛擬主機使用者來做。
我們看乙個.htaccess檔案的例子:
1 2 rewriteengine on
3 rewritebase /
4 rewritecond % -f [or]
5 rewritecond % -d
6 rewriterule ^.*$ - [s=42]
7 8 #rewriterule ^share/$ /share.php [qsa,l]
9 rewriterule ^tag/([^/]+)/?$ /user_tags.php?tag=$1 [qsa,l]
10 rewriterule ^city/([^/]+)/?$ /user_city.php?tag=$1 [qsa,l]
11 #rewriterule ^([^/]+)/day/([^/]+)/?$ /user_share.php?id=$1&s=1&seltime=$2 [qsa,l]
12 #rewriterule ^([^/]+)/day/([^/]+)/?$ /user_share.php?id=$1&s=1&seltime=$2 [qsa,l]
13 14 rewriterule ^([^/]+)/day/([^/]+)/?$ /user_share.php?id=$1&s=1&seltime=$2 [qsa,l]
15 rewriterule ^([^/]+)/week/([^/]+)/?$ /user_share.php?id=$1&s=2&seltime=$2 [qsa,l]
16 rewriterule ^([^/]+)/month/([^/]+)/?$ /user_share.php?id=$1&s=3&seltime=$2 [qsa,l]
17 18 rewriterule ^([^/]+)/day/?$ /user_share.php?id=$1&s=1 [qsa,l]
19 rewriterule ^([^/]+)/week/?$ /user_share.php?id=$1&s=2 [qsa,l]
20 rewriterule ^([^/]+)/month/?$ /user_share.php?id=$1&s=3 [qsa,l]
21 22 rewriterule ^([^/]+)/?$ /user_share.php?id=$1 [qsa,l]
23 比較長吧,我們就簡單關注一下關鍵的內容。之間就是定義的內容,rewriteengine就是確定是否執行url重寫功能,rewritebase就是基本的路徑是什麼,最關鍵的就是下面的rewriterule,就是我們需要重寫的規則了,這裡應用了相容perl規則的正規表示式:
text:
. 匹配任意單個字元
[chars] 匹配當前字元
[^chars] 不匹配當前字元
text1|text2 包含text1或者text2任何乙個
quantifiers:
? 零個或者乙個?號前的字元
* 零個或者任意個任意長度的任意字元
+ 乙個或者任意個任意長度的字元
grouping:
(text) grouping of text
(either to set the borders of an alternative or
for ****** backreferences where the nth group can
be used on the rhs of a rewriterule with $n)
anchors:
^ 匹配內容開始標記
$ 匹配內容結束標記
escaping:
/char 使用/來進行特殊字元的轉義,包括".()"等字元的轉義
基本規則如上,比如下面的正規表示式:^/([^/]+)/~([^/]+)/(.*)$ 就是能夠匹配象 /language/~ realname/.../file 這樣的路徑。
那麼從這個角度去看上面的內容就比較容易理解了。我們簡單看一下rewriterule指令的規則:
rewriterule 訪問的路徑 需要指向的真實路徑
這樣就很清楚了,比如說我要把/user/heiyeluren重定向到/user.php?uid=heiyeluren那麼我的規則就必須這樣:
rewriterule ^user/([^/]+)$ ^/user.php?uid=$2 [qsa,l]
舉一反三,就很容易理解規則如何去寫,也就能夠理解上面規則指令碼的內容了。
附:apache rewrite 技術
apache模組 mod_rewrite
url重寫指南
apache http伺服器 2.0版本文件
Yaf問題記錄(apache下rewrite問題)
一直在使用lnmp環境,自己搞點東西也拿筆記本當做服務來搞,筆記本近期出了問題,沒辦法,只能在台式電腦用wamp環境進行開發,將程式及等遷移後發現,設定rewrite規則不起作用,報錯為 the requested url admin index was not found on this serv...
關於Linux下的dz裡面的rewrite的步驟。
說實在的,找了一圈的論壇什麼的 確實需要自己記錄下來,在官方論壇或者度娘谷歌什麼的都找不到自己適合的。可能自己愚笨,或者自己理解能力有問題。所以,只能自己寫下來了。我不怎麼搞dz,但是環境需要配置。伺服器是自己的。論壇裡面所說的我都試過了 一些初步的步驟還是需要的 0 在後台 全域性 seo設定,開...
APACHE優化之apache的記憶體使用
keepalive引數 keepalivetimeout這個引數決定了,在什麼都不做之前,乙個http程序能夠等待多長時間?設想一下,如果keepalive設定為on,而keepalivetimeout設定為乙個比較大的數字,apache占用記憶體會很快的增長。這是因為,乙個apache程序完成了乙...