淺談.htaccess文件--避免濫用.htaccess文件


.htaccess文件提供了一種目錄級別的修改配置的方式。

NOTE: 
如果你擁有修改apache配置文件的權限,那么完全沒有必要使用.htaccess文件。使用.htaccess文件會拖慢apache的性能。所有允許出現在.htaccess文件中的配置指令都可以設置在apache配置文件中的Directory塊中,不僅擁有相同的作用而且具有更好的性能。

.htaccess是什么?如何使用.htaccess文件?
.htaccess文件提供了一種目錄級別的修改配置的方式。一個文件,包含一條或多條配置指令,放置於目錄下,這些配置指令對當前目錄和其所有子目錄生效。

NOTE: 
如果你想修改.htaccess文件的文件名,可以使用AccessFileName指令來定義新的文件名。例如,如果你想將.htaccess改成.config,那么只需要將以下指令加入apache的配置文件即可:

AccessFileName ".config"

通常來說,.htaccess的語法和apache的主配置文件語法一致。在.htaccess文件中的指令是否生效於AllowOverride級別密切相關。
以AddDefaultCharset(http://httpd.apache.org/docs/2.4/mod/core.html#adddefaultcharset)指令來說:
Context: server config, virtual host, directory, .htaccess 表示AddDefaultCharset是可以在.htaccess文件中設置的
Override: FileInfo 表示要使.htaccess中的AddDefaultCharset指令生效,那么相關目錄的AllowOverride至少需要FileInfo權限

如果你不確定一個指令是否被允許在.htaccess文件的使用,那么可以查看這條指令的文檔中的Context信息。

什么時候使用.htaccess文件?什么時候不要用?
通常來說,只有當你沒有修改apache配置文件權限的時候才需要使用.htaccess文件。

一個普遍的誤解是user authentication(用戶驗證)應該在.htaccess文件中完成;
另一個誤解是mod_rewrite指令必須在.htaccess文件中設置。

以上兩點是完全不正確的,你可以把user authentication(用戶驗證)放在apache的主配置文件里,並且推薦這樣做。同樣的,mod_rewrite指令在主配置文件里工作的更好(絕大多數方面上)。

.htaccess文件應該被應用於內容提供者需要配置滿足各個文件目錄各不相同的要求,並且沒有root權限。系統管理員不樂意頻繁更改配置,那么允許獨立的用戶在.htaccess文件中對配置進行更改就很有必要了。

無論如何,通常來說,應該盡量避免使用.htaccess文件。任何你考慮將要放置於.htaccess文件中的配置,都可以放置在主配置文件中的塊中。

為何需要避免使用.htaccess文件?這里有兩個主要原因
1. 性能。
2. 安全。

把.htaccess文件放置於/www/htdocs/example目錄下,和主配置文件中的<directory "="" www="" htdocs="" example"=""> ,所起的作用完全一致。

Contents of .htaccess file in /www/htdocs/example
AddType text/example ".exm"
Section from your httpd.conf file
<Directory "/www/htdocs/example">
    AddType text/example ".exm"
</Directory>

將AllowOverride改成none可以完全屏蔽.htaccess文件

AllowOverride None

配置指令是如何被接收的?
一個.htaccess文件中的配置指令會應用於.htaccess文件的當前目錄以及所有子目錄。然而,不要忘了可能還有更上層的文件目錄中的.htaccess文件。配置指令按照它們被發現的順序被應用。因此,一個.htaccess文件中的配置指令可能會覆蓋更上層的.htaccess文件,以及apache的主配置文件中的配置指令。

.htaccess與主配置文件合並
.htaccess文件可以覆蓋主配置文件中的配置指令,但是卻會被主配置文件中的其他種類的配置鎖覆蓋。這個特性可以用來“強化”那些不希望被.htaccess覆蓋的配置,無論是否具有寬泛的AllowOverride設置。例如,想要禁止腳本執行,不管.htaccess文件如何設置,可以使用:

<Directory "/www/htdocs">
    AllowOverride All
</Directory>

<Location "/">
    Options +IncludesNoExec -ExecCGI
</Location>

這個例子假設你的DocumentRoot是/www/htdocs。

Authentication(用戶認證)示例

.htaccess文件內容:

AuthType Basic
AuthName "Password Required"
AuthUserFile "/www/passwords/password.file"
AuthGroupFile "/www/passwords/group.file"
Require group admins

注意,要使以上指令生效需要AllowOverride AuthConfig權限。

Server Side Includes 示例
.htaccess文件的另一個常用需求是開啟服務端包含指定目錄。將.htaccess文件放置於想要的目錄中:

.htaccess文件內容:

Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml

注意: 以上配置指令需要AllowOverride Options和AllowOverride FileInfo

.htaccess文件中的Rewrite Rules
使用.htaccess來創建Rewrite Rule時需要注意每一個目錄上下文都會有一點點更改。原始的URI會變成相對於當前目錄,請看一下示例:

# In httpd.conf
RewriteRule "^/images/(.+)\.jpg" "/images/$1.png"

# In .htaccess in root dir
RewriteRule "^images/(.+)\.jpg" "images/$1.png"

# In .htaccess in images/
RewriteRule "^(.+)\.jpg" "$1.png"

在.htaccess文件中,開頭的斜杠被去掉了,並且在images子目錄中,/images/也被去掉了。

 

如果您覺得閱讀本文對您有幫助,歡迎轉載本文,但是轉載文章之后必須在文章頁面明顯位置保留此段聲明,否則保留追究法律責任的權利。

作  者:blog.jpdou.top

原文鏈接:http://blog.jpdou.top/httpd-htaccess/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM