使用Apache的rewrite技術

2021-04-07 08:51:20 字數 3027 閱讀 8182

使用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 技術 http://www.yujs.com/recommendation/004.htm

apache模組 mod_rewrite http://linux.dalouis.com/doc/apache2.0/mod/mod_rewrite.html

url重寫指南 http://linux.dalouis.com/doc/apache2.0/misc/rewriteguide.html

apache http伺服器 2.0版本文件 http://linux.dalouis.com/doc/apache2.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程序完成了乙...