.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/

浅谈.htaccess文件--避免滥用.htaccess文件的更多相关文章

  1. 浅谈如何使用代码为MP3文件写入ID3Tags

    作者:郑童宇 GitHub:https://github.com/CrazyZty 1.前言 做了三年左右的Android开发,一直没写过博客,最近正好打算换工作,算是闲一些,就将以前开发所遇到的一些 ...

  2. 浅谈独立使用NDK编译库文件(Android)

    阅读前准备 这是一篇相对入门的文章.文中会涉及到少许NDK的知识,但个人认为对初学者来说都相对比较实用,因为都是在平时项目中遇到的(目前自己也是初学者).一些其他高深的技术不再本文探讨范围之内(因为我 ...

  3. VSTO学习笔记(九)浅谈Excel内容比较

    原文:VSTO学习笔记(九)浅谈Excel内容比较 说起文件内容比较,或许我们首先想到的是UltraCompare这类专业比较的软件,其功能非常强大,能够对基于文本的文件内容作出快速.准确的比较,有详 ...

  4. 浅谈Linux下如何修改IP

    linux 下命令之浅谈//cd ..  //返回上一级//创建文件夹touch test.txt//Linux不区分大小写//往一个文件中追加内容echo "****" > ...

  5. 浅谈 举家搬迁静态文件到CDN

    由于七牛CDN最近做活动,对于标准用户可以免费使用如下优惠 10 GB 存储空间 10 G/月 下载流量 10 万次/月 PUT/DELETE 请求 100 万次/月 GET 请求 以上这些指标直接就 ...

  6. 浅谈qmake之pro、pri、prf、prl文件

    浅谈qmake之pro.pri.prf.prl文件 转载自:http://blog.csdn.net/dbzhang800/article/details/6348432 尽管每次和cmake对比起来 ...

  7. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

  8. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  9. .htaccess防盗链方法(文件、图片)

    http标准协议中有专门的字段记录referer,一来可以追溯上一个入站地址是什么,二来对于资源文件,可以跟踪到包含显示他的网页地址是什么. 因此所有防盗链方法都是基于这个Referer字段两种方法: ...

随机推荐

  1. shell监测磁盘使用并发送邮件

    linux sendEmail工具的安装使用    1.下载文件 #wget  http://files.cnblogs.com/files/sunziying/sendEmail-v1.56.tar ...

  2. 36.浅谈DLL劫持

    最近在搞内网,需要实现免杀后门,大佬推荐了dll劫持,DLL劫持后,能干很多事情,比如杀软对某些厂商的软件是实行白名单的,你干些敏感操作都是不拦截,不提示的.还有留后门,提权等等.本文主要介绍如何检测 ...

  3. opengl 和 vs2010的安装配置

    1.先安装vs2010, 输个激活秘钥 2.Windows 7下OpenGL如何配置,配置glut:    http://jingyan.baidu.com/article/b0b63dbfd1c08 ...

  4. jeecms v8 网站访问量配置

    <script src="${resSys}/jquery.js" type="text/javascript"></script> & ...

  5. jQuery 选择表格(table)里的行和列及改变简单样式

    本文只是介绍如何用jQuery语句对表格中行和列进行选择以及一些简单样式改变,希望它可以对jQuery表格处理的深层学习提供一些帮助jQuery对表格(table)的处理提供了相当强大的功能,比如说对 ...

  6. bootstrap常用部件下载

    http://shapebootstrap.net/item/1524915-adminlte-dashboard-and-control-panel/live-demo

  7. 「CF744C」Hongcow Buys a Deck of Cards「状压 DP」

    题意 你有\(n\)个物品,物品和硬币有\(A\),\(B\)两种类型,假设你有\(M\)个\(A\)物品和\(N\)个\(B\)物品 每一轮你可以选择获得\(A, B\)硬币各\(1\)个,或者(硬 ...

  8. SAS笔记(1) PDV与数据读入

    其实我是不喜欢SAS的.当然,我不喜欢她,并不代表她不好,实际上在某些应用场景下SAS是款很优秀的软件.我的数据分析之路始于R,品尝过R的灵活与简洁(不论是软件安装还是语法)后,再来学习SAS,的确提 ...

  9. vue -- 使用sass并引入公共sass文件

    sass可以提高我们的开发效率,怎么在vue的项目中使用sass并且可以设置一些公共的文件呢? 使用sass 1.安装sass的依赖包 npm install --save-dev sass-load ...

  10. Go:Nsq消息队列

    Nsq服务端简介 在使用Nsq服务之前,还是有必要了解一下Nsq的几个核心组件整个Nsq服务包含三个主要部分 nsqlookupd 先看看官方的原话是怎么说:nsqlookupd是守护进程负责管理拓扑 ...