|
|
|
|
|
今天想使用.htaccess實(shí)現(xiàn)一個(gè)rewrite重寫功能,誰(shuí)知照搬其他網(wǎng)站的.htaccess過(guò)來(lái)后連網(wǎng)站都訪問(wèn)不了了,于是研究下使用Apache服務(wù)器的網(wǎng)站是如何用.htaccess實(shí)現(xiàn)rewrite重寫的,此文記錄的是本人的一點(diǎn)心得,對(duì)新手具有參考作用。
首先檢查是否啟用了 rewrite_module
。如何啟用?打開 httpd.conf
文件,此文件在Apache的安裝目錄下。
對(duì)于windows系統(tǒng),默認(rèn)安裝路徑是:
C:\Program Files\Apache Software Foundation\Apache2.2\conf
對(duì)于Linux系統(tǒng),可通過(guò) find
命令來(lái)搜索:
find / -name httpd.conf
然后把 #LoadModule rewrite_module
前面的 #
號(hào)去掉即可。
啟用rewrite_module
最后不要忘了重啟Apache,以使更改生效。
要.htaccess支持rewrite重寫,必須要在前面寫上一句:
RewriteEngine On
否則,.htaccess里的 RewriteRule
語(yǔ)句是無(wú)效的。
RewriteEngine On 不能少
溫馨提示:更改.htaccess后立即生效,無(wú)需重啟Apache服務(wù)器。
除了上述的兩個(gè)原因外,如果 RewriteRule
的正則表達(dá)式有誤,也會(huì)導(dǎo)致 rewrite
重寫失敗。因此你需要確保你的正則寫法無(wú)誤。你可以寫一個(gè)最簡(jiǎn)單的 RewriteRule
測(cè)試一下重寫功能是否有效。如本案例寫的:
RewriteRule ^test/index.html$ /index.html
意思是訪問(wèn) /test/index.html
時(shí)會(huì)跳到 /index.html
,跳轉(zhuǎn)成功則表示重寫功能有效。
最后附上一條對(duì)URL重寫的實(shí)例,供大家參考學(xué)習(xí):
RewriteRule ^article/([^/]+)/([^/]+)/([^/]+)/(.*)$ /article.php?issue=$1&edition=$2&id=$3&title=$4 [L,QSA,NC]
這條語(yǔ)句可以對(duì)URL
/article.php?issue=1&edition=leeds&id=1394216062&title=apache-falls-to-be-started
進(jìn)行重寫
/article/1/leeds/1394216062/apache-falls-to-be-started
解釋:
L : last,表示已是最后一條規(guī)則,.htaccess文件解析將退出。
QSA : query string append,表示追加請(qǐng)求串,此標(biāo)記強(qiáng)制重寫引擎在已有的替換串中追加一個(gè)請(qǐng)求串,而不是簡(jiǎn)單的替換。 如果需要通過(guò)重寫規(guī)則在請(qǐng)求串中增加信息,就可以使用這個(gè)標(biāo)記。
NC : no case,不區(qū)分大小寫,忽略大小寫。
R : redirect,重定向。
F : forbidden,禁止訪問(wèn)。