apache重寫規(guī)則

前兩天部署一個(gè)項(xiàng)目到本機(jī)環(huán)境,從nginx轉(zhuǎn)到apache,因?yàn)椴皇煜pache的重寫規(guī)則,給自己挖了很多坑。。看了很多博客后,終于解決了問題,總結(jié)如下。

什么是url重寫?

url重寫可以把冗長的url地址按我們自定義的規(guī)則來簡化。比如一個(gè)類似?www.test.com?user_id=123&user_ps=abc?的域名,通過url重寫,我們直接以?www.test.com/123/abc?的方式來訪問。這樣是不是簡潔多了?這樣既可以增強(qiáng)seo,同時(shí)也可以處理形如訪問url不存在的問題。

啟動(dòng)url重寫的步驟如下

1、打開apache/conf目錄下的httpd.conf,找到

#LoadModule rewrite_module modules/mod_rewrite.so

將最前面的#去掉

2、找到

<Directory />?

?AllowOverride NONE? ?

?Require all granted

</Directory>

改成

<Directory />

AllowOverride ALL ?

Require all granted

</Directory>

3、在項(xiàng)目根目錄下創(chuàng)建 .htaccess 文件,在該文件中輸入(windows下無法直接創(chuàng)建。htaccess文件,可先新建記事本,再另存為)

<IfModulemod_rewrite.c>

Options Indexes FollowSymlinks

RewriteEngine On ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#啟動(dòng)重寫引擎

RewriteCond %{REQUEST_FILENAME} !-d ? ? ? ? ? ? ? #判斷請(qǐng)求文件是否為目錄

RewriteCond %{REQUEST_FILENAME} !-f ? ? ? ? ? ? ? #判斷請(qǐng)求文件是否為文件

RewriteRule ^(.*)$ index.php/$1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#重寫規(guī)則,用正則表達(dá)式

</IfModule>

以上即為啟用url重寫的步驟,接下來具體介紹一下.htaccess文件中各字段的意義和屬性。

Options Indexes FollowSymLinks就表示:我訪問www.test.com,如果文件根目錄里有 index.html(index.php),瀏覽器就會(huì)顯示 index.html的內(nèi)容,如果沒有 index.html,瀏覽器就會(huì)顯示這文件根目錄的目錄列表,目錄列表包括文件根目錄下的文件和子目錄。

考慮到安全問題,不想讓別人訪問到目錄文件,應(yīng)該怎么辦呢?只需要將Indexes字段刪掉即可。再次訪問該域名,如果不存在index.html或者index.php文件,則會(huì)報(bào)403錯(cuò)誤。

RewriteEngin On表示啟用重寫引擎,將On改為Off即可關(guān)閉重寫引擎,方便我們啟動(dòng)或關(guān)閉重寫引擎,而無需修改大量代碼。

RewriteCond表示重寫條件,類似于if條件語句,一般形式為? ? RewriteCond %{XXXXXXX} + 正則匹配條件? ? ,可以多條RewriteCond對(duì)應(yīng)一條RewriteRule

RewriteRule 表示重寫規(guī)則,一般形式為? RewriteRule 正則匹配條件? XXXXXX ,上文的

RewriteRule ^(.*)$ index.php/$1

表示將任意請(qǐng)求改成index.php/$1,其中$1表示正則表達(dá)式中第一個(gè)()中的值。

對(duì)于AllowOverride All,表示允許.htaccess覆寫httpd.conf中的設(shè)置,如果想禁止.htaccess起作用 ,將All改成none就可以了

在這里對(duì).htaccess的利弊做一些補(bǔ)充

當(dāng)我們是與其他人共享服務(wù)器的情況下,我們可能無法直接修改服務(wù)器的配置,通過.htaccess可方便我們對(duì)服務(wù)器進(jìn)行修改,且不會(huì)干預(yù)到他人。但這樣做會(huì)導(dǎo)致性能降低,理由如下:

一個(gè).htaccess文件是對(duì)當(dāng)前目錄及其子目錄起作用的,也就是說當(dāng)我們?cè)L問一個(gè)文件時(shí),服務(wù)器不僅要從檢查當(dāng)前目錄下的.htaccess文件,還要檢查其父目錄的,很有可能還要檢查其祖父級(jí)目錄的,無論這些目錄中.htaccess文件是否存在,這樣就可能有很多次的訪問是沒有必要的,影響了性能。

所以如果可以,盡可能直接修改httpd.conf文件,具體的語法與.htaccess文件中的語法是一樣的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 此文章轉(zhuǎn)載~ Apache偽靜態(tài)(Rewrite).htaccess文件詳解 Htaccess(超文本訪問)是一個(gè)...
    bornfreekiss閱讀 4,298評(píng)論 0 6
  • 重寫規(guī)則 【重寫規(guī)則的作用范圍】 可以使用在Apache主配置文件httpd.conf中 可以使用在httpd.c...
    桖辶殤閱讀 2,004評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,648評(píng)論 19 139
  • 一場電影就像一次人生旅途,每一場電影,每一次邂逅。 這是我曾經(jīng)整理過我看過評(píng)分較高的電影,每個(gè)人對(duì)于電影都有不...
    Alethea閱讀 185評(píng)論 0 0
  • 今天打了幾把排位,又黑了。 教練張掐指一算,發(fā)現(xiàn)事情并不簡單。 還好及時(shí)發(fā)現(xiàn)問題之所在,特來傳授給大家。 ↓ ↓ ...
    大貝吔屎啦閱讀 226評(píng)論 4 1

友情鏈接更多精彩內(nèi)容