|
|
|
|
|
今天想使用.htaccess實(shí)現(xiàn)一個(gè)rewrite重寫(xiě)功能,誰(shuí)知照搬其他網(wǎng)站的.htaccess過(guò)來(lái)后連網(wǎng)站都訪(fǎng)問(wèn)不了了,于是研究下使用Apache服務(wù)器的網(wǎng)站是如何用.htaccess實(shí)現(xiàn)rewrite重寫(xiě)的,此文記錄的是本人的一點(diǎn)心得,對(duì)新手具有參考作用。
首先檢查是否啟用了 rewrite_module
。如何啟用?打開(kāi) 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重寫(xiě),必須要在前面寫(xiě)上一句:
RewriteEngine On
否則,.htaccess里的 RewriteRule
語(yǔ)句是無(wú)效的。
RewriteEngine On 不能少
溫馨提示:更改.htaccess后立即生效,無(wú)需重啟Apache服務(wù)器。
除了上述的兩個(gè)原因外,如果 RewriteRule
的正則表達(dá)式有誤,也會(huì)導(dǎo)致 rewrite
重寫(xiě)失敗。因此你需要確保你的正則寫(xiě)法無(wú)誤。你可以寫(xiě)一個(gè)最簡(jiǎn)單的 RewriteRule
測(cè)試一下重寫(xiě)功能是否有效。如本案例寫(xiě)的:
RewriteRule ^test/index.html$ /index.html
意思是訪(fǎng)問(wèn) /test/index.html
時(shí)會(huì)跳到 /index.html
,跳轉(zhuǎn)成功則表示重寫(xiě)功能有效。
最后附上一條對(duì)URL重寫(xiě)的實(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)行重寫(xiě)
/article/1/leeds/1394216062/apache-falls-to-be-started
解釋?zhuān)?/strong>
L : last,表示已是最后一條規(guī)則,.htaccess文件解析將退出。
QSA : query string append,表示追加請(qǐng)求串,此標(biāo)記強(qiáng)制重寫(xiě)引擎在已有的替換串中追加一個(gè)請(qǐng)求串,而不是簡(jiǎn)單的替換。 如果需要通過(guò)重寫(xiě)規(guī)則在請(qǐng)求串中增加信息,就可以使用這個(gè)標(biāo)記。
NC : no case,不區(qū)分大小寫(xiě),忽略大小寫(xiě)。
R : redirect,重定向。
F : forbidden,禁止訪(fǎng)問(wèn)。