如何開啟mod_rewrite.so:http://www./html/webkaifa/apache/2010/0228/4006.html (我現(xiàn)在就想開啟和配置: 在conf目錄的httpd.conf文件中找到 LoadModule rewrite_module modules/mod_rewrite.so 將這一行前面的#去掉。 2.在要支持url rewirte的目錄啟用 AllowOverride All,通常是<Directory '/var/www/html>這個(gè)主目錄下面的AllowOverride,修改這一個(gè)就OK 3.在虛擬主機(jī)中開啟,如下 <VirtualHost phpbook.com:80> RewriteEngine On rewriteOptions Inherit DocumentRoot /var/www/html/PHPbook/ ServerName phpbook.com </VirtualHost> 4.在 /var/www/html/PHPbook/下某個(gè)目錄書寫你的.htaccess OK完成) 學(xué)習(xí)目標(biāo) 1.了解.htaccess常用指令 2.實(shí)現(xiàn)網(wǎng)站統(tǒng)一入口 在實(shí)現(xiàn)PHP網(wǎng)址重定向的功能之前,必須確保http.conf中已經(jīng)加載了mod_rewrite模塊; 為了能靈活地控制重定向效果,下面開始了解.htaccess幾個(gè)常用的指令。 rewriteBase指令的功能:指定一個(gè)新目錄作為重寫規(guī)則的根目錄。有點(diǎn)抽象,下面我們做一個(gè)例子了解它的具體功能。 準(zhǔn)備工作:
目的:如果我們?cè)跒g覽器輸入域名http:///news_sport1.html,會(huì)輸出什么呢? 答案是article 下面我們修改.htaccess的內(nèi)容,在rewriteBase前面加上’#’符號(hào),將它注釋掉,看看這一次輸出什么內(nèi)容? 這一次輸出的是root,現(xiàn)在相信你對(duì)rewriteBase這一指令的功能已經(jīng)有了大概的了解了吧。當(dāng)我們啟用rewriteBase命令時(shí),那么符合rewriteRule的網(wǎng)站將被跳轉(zhuǎn)到相應(yīng)的目錄下。 rewriteRule指令的簡(jiǎn)單學(xué)習(xí)(知識(shí)準(zhǔn)備:正則表達(dá)式) rewriteRule的格式為:rewriteRule 網(wǎng)址1 網(wǎng)址2 這樣符合網(wǎng)址格式1的地址就會(huì)被重定向到網(wǎng)址2 下面對(duì)rewriteRule進(jìn)行修改,將rewriteRule ^news_sport1\.html$ news.php?id=1改為 rewriteRule ^news_sport([\d]+)\.html$ news.php?id=$1 修改news.php的內(nèi)容為
實(shí)驗(yàn)效果 可以看到當(dāng)我們輸入news_sport1.html時(shí),$_GET[‘id’]為1,輸入news_sport2.html時(shí),$_GET[‘id’]為2 如果我們將rewriteRule 修改為 ^.*$ news.php會(huì)有什么效果呢? 可以看到無論我們?cè)跒g覽器地址欄輸入域名加地址,不管事實(shí)上這個(gè)地址存不存在,都會(huì)跳轉(zhuǎn)到news.php這個(gè)文件。這樣就實(shí)現(xiàn)了網(wǎng)站統(tǒng)一入口的功能 多參數(shù)的接收學(xué)習(xí)目標(biāo):從靜態(tài)網(wǎng)址中提取參數(shù) 在前一篇文章中我們已經(jīng)了解了PHP網(wǎng)址重定向的一些基礎(chǔ)知識(shí),這一次我們將學(xué)習(xí)一些更為復(fù)雜的URL重寫規(guī)則。 打開百度新聞,然后查看幾篇新聞的網(wǎng)址,可以看到這些新聞的網(wǎng)址都是靜態(tài)的網(wǎng)址。 如何實(shí)現(xiàn)這樣的效果呢?下面我們來進(jìn)行一個(gè)簡(jiǎn)單的小案例 網(wǎng)址http:///system/2012/10/22/014.html,我們假設(shè)每一個(gè)正斜杠就是一個(gè)請(qǐng)求的參數(shù),比如system為請(qǐng)求目錄,2012/10/22分別為請(qǐng)求的年/月/日,014為文章的ID,我們將在目標(biāo)網(wǎng)頁(yè)中分別提取這些參數(shù) 1.創(chuàng)建.htaccess文件并書寫rewriteRule規(guī)則 rewriteEngine On rewriteRule ^([a-zA-Z]+)/([0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)\.html$ /news.php?category=$1&year=$2&month=$3&day=$4&id=$5 2.新建news.php文件
3.在瀏覽器網(wǎng)地址中輸入http:///system/2012/10/22/014.html,結(jié)果如下 下面我們分析這一解析過程 綜合示例經(jīng)過前面兩篇文章的學(xué)習(xí),我們對(duì)URL重寫已經(jīng)有了一定的了解,這一篇文章我們將通過一個(gè)綜合例子來應(yīng)用重寫知識(shí)。 效果簡(jiǎn)述(我想實(shí)現(xiàn)以下功能): 1.當(dāng)我在瀏覽器中輸入catalog.html時(shí),我實(shí)際想進(jìn)入的頁(yè)面是catalog.php這個(gè)分類頁(yè)面 2.當(dāng)我點(diǎn)擊catalog.html下面某個(gè)產(chǎn)品的鏈接,比如product/apache/1.html時(shí),我實(shí)際上是希望跳轉(zhuǎn)到product.php?category=apache?id=1,將apache作為目錄參數(shù),1作為商品id號(hào)傳遞給商品信息頁(yè) 3.我建立了product.php這個(gè)商品頁(yè)面,它會(huì)根據(jù)傳遞過來的category和id從數(shù)據(jù)庫(kù)中提取出相應(yīng)的商品信息,并進(jìn)行顯示。 下面將具體實(shí)現(xiàn)這些功能 1.建立.htaccess文件 rewriteEngine On rewriteRule ^catalog\.html$ /catalog.php [L] rewriteRule ^product/([a-zA-z0-9]+)/([0-9]+)\.html$ /product.php?category=$1&id=$2 2.建立catalog.php文件
3.在瀏覽器中輸出http:///catalog.html,結(jié)果如下 4.建立product.php頁(yè)面(為了簡(jiǎn)單,這里我只是顯示參數(shù))
5.點(diǎn)擊上面兩個(gè)鏈接,可以看到效果如下 實(shí)驗(yàn)到這里就已經(jīng)完成了我們的目標(biāo)了,但是否還有需要改進(jìn)的地方呢? 對(duì)于商品信息鏈接,我們是直接采用手寫靜態(tài)鏈接地址的方式添加上的,但是在實(shí)際應(yīng)用中。這個(gè)網(wǎng)址信息通常是從數(shù)據(jù)庫(kù)中提取出相應(yīng)的參數(shù),然后再生成靜態(tài)網(wǎng)址的。下面我們就看看如何實(shí)現(xiàn)這個(gè)功能。 結(jié)合第3課的代碼2分析 2.建立catalog.php文件
實(shí)際上我們更希望的代碼最好是這樣
是不是實(shí)現(xiàn)了我們的效果了呢… |
|