|
|
|
|
|
今天想使用.htaccess實(shí)現(xiàn)一個(gè)rewrite重寫功能,誰知照搬其他網(wǎng)站的.htaccess過來后連網(wǎng)站都訪問不了了,于是研究下使用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),可通過 find
命令來搜索:
find / -name httpd.conf
然后把 #LoadModule rewrite_module
前面的 #
號(hào)去掉即可。
啟用rewrite_module
最后不要忘了重啟Apache,以使更改生效。
要.htaccess支持rewrite重寫,必須要在前面寫上一句:
RewriteEngine On
否則,.htaccess里的 RewriteRule
語句是無效的。
RewriteEngine On 不能少
溫馨提示:更改.htaccess后立即生效,無需重啟Apache服務(wù)器。
除了上述的兩個(gè)原因外,如果 RewriteRule
的正則表達(dá)式有誤,也會(huì)導(dǎo)致 rewrite
重寫失敗。因此你需要確保你的正則寫法無誤。你可以寫一個(gè)最簡單的 RewriteRule
測(cè)試一下重寫功能是否有效。如本案例寫的:
RewriteRule ^test/index.html$ /index.html
意思是訪問 /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]
這條語句可以對(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)求串,而不是簡單的替換。 如果需要通過重寫規(guī)則在請(qǐng)求串中增加信息,就可以使用這個(gè)標(biāo)記。
NC : no case,不區(qū)分大小寫,忽略大小寫。
R : redirect,重定向。
F : forbidden,禁止訪問。