通常利用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文件的优缺点请参考百度百科里的.htaccess http://baike.baidu.com/view/91163.htm 
 
如果在.htaccess文件中的某些指令不起作用,可能有多种原因。

 

  最常见的原因是AllowOverride指令没有被正确设置,必须确保没有对此文件区域设置 AllowOverride None 。有一个很好的测试方法,就是在.htaccess文件随便增加点无意义的垃圾内容,如果服务器没有返回了一个错误消息,那么几乎可以断定设置了 AllowOverride None 。

 

  在访问文档时,如果收到服务器的出错消息,应该检查Apache的错误日志,可以知道.htaccess文件中哪些指令是不允许使用的,也可能会发现需要纠正的语法错误。

URL重定向之一.htaccess文件和AllowOverride指令的更多相关文章

  1. .htaccess文件讲解

    .htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户 ...

  2. Apache .htaccess文件

    今天在将ThinkPHP的URL模式由普通模式(URL_MODE=1)http://localhost/mythinkphp/index.php/Index/user/id/1.html改为重写模式 ...

  3. Apache 容器 Directory Location Files 及htaccess文件

    配置段容器的类型 相关模块 core mod_proxy 相关指令 <Directory> <DirectoryMatch> <Files> <FilesMa ...

  4. Apache伪静态(Rewrite).htaccess文件详解

    Htaccess(超文本访问)是一个简单的配置文件,它允许设计师,开发者和程序员通过它来改变Apache Web服务器的配置.这些功能包括用户重定向.URL重写(url rewrite,国内很多称为伪 ...

  5. .htaccess 文件来进行用户组的目录权限访问控制

    <IfModule rewrite_module>RewriteEngine onRewriteRule ^((?:bootstrap|css|img|js||MathJax|video) ...

  6. 网站之.htaccess文件

    Apache系统中的.htaccess文件(分布式配置文件)提供了针对目录改变配置的方法,也就是在一个特定的文件目录中放置一个包含指令的文件,以作用于此目录以及所有子目录.直白的说,.htaccess ...

  7. 在apache中使用.htaccess文件的注意事项

    在apache的配置文件中: <VirtualHost *:80> ServerName tp5.com DocumentRoot d:/wamp/www/tp5.com/public & ...

  8. 浅谈.htaccess文件--避免滥用.htaccess文件

    .htaccess文件提供了一种目录级别的修改配置的方式. NOTE: 如果你拥有修改apache配置文件的权限,那么完全没有必要使用.htaccess文件.使用.htaccess文件会拖慢apach ...

  9. .htaccess文件 301重定向URL重写[NC][R][F][L]是什么意思

    .htaccess中的[NC][R][F][L]几个标记是什么意思 NC: no case,就是说不区分大小写 R:redirect,重定向 F:forbidden,禁止访问 L:last,表示已经是 ...

随机推荐

  1. IBM Security App Scan 资料整理

    转自:http://blog.csdn.net/u013147600/article/details/50002089 这是学习和使用IBM AppScan过程中总结整理的一些资料.   扫描系统操作 ...

  2. 手动建立storybook

    1. Add @storybook/react npm i --save-dev @storybook/react 2. Add react, react-dom, and babel-core np ...

  3. windows下忘记mysql超级管理员rootpassword的解决的方法

    今天帮一个朋友找回了MYSQL的超级管理员ROOTpassword.開始输入命令的时候少打了个"点"害的折腾了几个小时.最终攻克了,写个教程,方便以后使用! 假设你是server是 ...

  4. PHP性能:序——谈ab(Apache Bench)压力测试工具

    PHP性能:序——谈ab(Apache Bench)压力测试工具 ab(Apache  Bench)是啥? ab是Apache自带的一个压力测试软件,可以通过ab命令和选项对某个URL进行压力测试.a ...

  5. 【转】【Mac系统】之Python版本切换、谷歌浏览器取消自动升级

    都是很有用的文章,本文都是转载文章,以便后续查阅: Mac Chrome浏览器取消自动升级(看这一篇就够了) <Mac修改默认python版本> <mac设置python版本切换,和 ...

  6. 【安装.net framework4.0】之安装失败,“安装时发生严重错误”

    在网上查了很多资料都说改什么文件名和注册表什么的,根本没用,后来查到一篇文章,提供了下面的解决办法: 地址:<Microsoft .NET Framework 4.0安装时发生严重错误 无法安装 ...

  7. Boost学习总结(一)VS2010环境下编译STLport和Boost

    Boost学习总结(一)VS2010环境下编译STLport和Boost Boost简介 Boost库是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库.1998年,Beman G.Da ...

  8. 有关于__align(n) ,内存对齐

    __align __align 关键字指示编译器在 n 字节边界上对齐变量. __align 是一个存储类修饰符.它不影响函数的类型. 语法 __align(n) 其中: n 是对齐边界. 对于局部变 ...

  9. 使用tomcat7-maven-plugin部署Web项目

      一.环境准备 我使用的环境是:Window 10.Tomcat 8.0.36.maven3.tomcat7-maven-plugin 2.2版本. 二.设置环境变量 安装Tomcat8.0.36和 ...

  10. c# 怎么更改DataTable 中某列的值?

    DataColumns dc = td.Columns["你的列"]; int inx = dc.Ordinal;td.Columns.Remove(dc);dc.DefaultV ...