一般利用Apache的rewrite模塊對URL進行重寫的時候,rewrite規則會寫在 .htaccess文件裏。可是要使Apache可以正常讀取 .htaccess文件的內容,就必須對 .htaccess所在的目錄進行配置。
首先來認識一下.htaccess文件,概述來講,htaccess文件是Apache服務器中的一個配置文件,它負責相關目錄下的網頁配置。經過htaccess文件,能夠幫咱們實現:網頁301重定向、自定義404錯誤頁面、改變文件擴展名、容許/阻止特定的用戶或者目錄的訪問、禁止目錄列表、配置默認文檔等功能。
.htaccess文件(或者"分佈式配置文件")提供了針對目錄改變配置的方法, 即,在一個特定的文檔目錄中放置一個包含一個或多個指令的文件,當.htaccess中的指令生效時,它將重寫原來Apache中默認的指令,但只做用於.htaccess文件所在的目錄及其全部子目錄。做爲用戶,所能使用的命令受到限制。管理員能夠經過Apache的AllowOverride指令來設置。正則表達式
首先咱們來詳細認識一下Apache的AllowOverride指令:
當服務器發現一個.htaccess文件(由AccessFileName指定)時,它須要知道在這個文件中聲明的是哪些指令能覆蓋在此以前指定的配置指令。
AllowOverride指令僅容許存在於<Directory>配置段
AllowOverride僅在不包含正則表達式的<Directory>配置段中才是有效的。在<Location>, <DirectoryMatch>, <Files>配置段中都是無效的。
通常從安全性考慮,更目錄的AllowOverride屬性通常都配置成不容許任何Override,即原文配置是這麼寫的:
<Directory />
AllowOverride
None
</Directory>
AllowOverride指令按類別決定了.htaccess文件中哪些指令纔是有效的。 當AllowOverride設置成None時,相應的配置目錄下的 .htaccess 文件是不被讀取,被徹底忽略的,此時 .htaccess文件也就徹底不生效。 當AllowOverride設置成 All 時,全部具備「.htaccess」做用域的指令都會生效,意味着原來Apache中的指令都將會按 .htaccess文件中的指令重寫。
對於URL rewrite 來講,至少吧他對應的權限開啓,也就是開啓 FileInfo :即:
<Directory /www/>
AllowOverride
FileInfo
</Directory>
對於AllowOverride,還能夠對它指定以下一些能被重寫的指令類型.
1 AuthConfig 容許使用全部的權限指令,他們包括 AuthDBMGroupFile AuthDBMUserFile AuthGroupFile AuthName AuthTypeAuthUserFile 和 Require
2 FileInfo 容許使用文件控制類型的指令。它們包括 AddEncoding AddLanguage AddType DEfaultType ErrorDocument LanguagePriority
3 Indexes 允 許使用目錄控制類型的指令。它們包 括 AddDescription AddIcon AddIconByEncoding AddIconByType DefaultIcon DirectoryIndex FancyIndexing HeaderName IndexIgnore IndexOptions ReadmeName
4 Limit 容許使用權限控制指令。它們包括Allow Deny和Order
5 Options 容許使用控制目錄特徵的指令.他們包括Options 和XBitHack
Options:
Options指令通常都寫在AllowOverride指令的上面:以下形式:
<Directory "D:/AppServ/Apache2.2/icons">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Options指令以下:
1 All 准許如下除MultiViews之外全部功能
2 MultiViews 容許多重內容被瀏覽,若是你的目錄下有一個叫作foo.txt的文件,那麼你能夠經過/foo來訪問到它,這對於一個多語言內容的站點比較有用
3 Indexes 若該目錄下無index文件,則准許顯示該目錄下的文件以供選擇,禁止目錄瀏覽能夠刪這項或「-Indexes」。
4 IncludesNOEXEC 准許SSI,但不可以使用#exec和#include功能
5 Includes 准許SSI
6 FollowSymLinks 在該目錄中,服務器將跟蹤符號連接。注意,即便服務器跟蹤符號連接,它也不會改變用來匹配不一樣區域的路徑名,若是在<Local>標記內設置,該選項會被忽略
7 SymLinksIfOwnerMatch 在該目錄中僅僅跟蹤本站點內的連接
8 ExecCGI 在該目錄下准許使用CGI
若是在.htaccess文件中的某些指令不起做用,可能有多種緣由。 最多見的緣由是AllowOverride指令沒有被正確設置,必須確保沒有對此文件區域設置 AllowOverride None 。有一個很好的測試方法,就是在.htaccess文件隨便增長點無心義的垃圾內容,若是服務器沒有返回了一個錯誤消息,那麼幾乎能夠判定設置了 AllowOverride None 。 在訪問文檔時,若是收到服務器的出錯消息,應該檢查Apache的錯誤日誌,能夠知道.htaccess文件中哪些指令是不容許使用的,也可能會發現須要糾正的語法錯誤。