简述

.htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

Unix、Linux系统或者是任何版本的Apache Web服务器都是支持.htaccess的,但是有的主机服务商可能不允许你自定义自己的.htaccess文件。

启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config 。

笼统地说,.htaccess可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。

写法规则

DirectoryIndex zxg.html #改变默认文件

RewriteEngine On #打开或关闭运行时刻的重写引擎,设置位置:服务器配置, 虚拟主机, 目录.htaccess  

'-d' (是一个目录[directory])
将TestString视为一个路径名并测试它是否存在而且是一个目录 '-f' (是一个常规的文件[file])
将TestString视为一个路径名并测试它是否存在而且是一个常规的文件 '-l' (是一个符号连接[link])
将TestString视为一个路径名并测试它是否存在而且是一个符号连接 redirect|R [=HttpCode] (强制重定向 redirect)
(使新的URL成为一个URI) 为前缀的Substitution可以强制性执行一个外部重定向。
如果code没有指定,则产生一个HTTP响应代码302(临时性移动)。
注意: 在使用这个标记时,必须确保该替换字段是一个有效的URL last|L (最后一个Url规则的重写last)
立即停止重写操作,并不再应用其他重写规则。这个标记可以阻止当前已被重写的URL为其后继的规则所重写 'forbidden|F' (强制URL为被禁止的 forbidden)
强制当前URL为被禁止的,即,立即反馈一个HTTP响应代码403(被禁止的) 'nocase|NC' (忽略大小写 no case)它使Pattern忽略大小写,即, 在Pattern与当前URL匹配时,'A-Z' 和'a-z'没有区别。

综合示例

#注意,#只能放在句首,下面句尾的#实际应用要删除掉
#改变默认文件
DirectoryIndex zxg.html #伪静态
RewriteEngine On #打开或关闭运行时刻的重写引擎,设置位置:服务器配置, 虚拟主机, 目录.htaccess
ReWriteRule ^(\d+)_(\d+)\.html news.php?cid=$1&aid=$2 [NC,R=301,L] #301定向,不区分大小写 #访问的不是一个文件或目录的时候就跳转到一个404.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
ReWriteRule .* 404.html [L] #去掉index.php
RewriteCond $1 !^(index\.php|images|robots\.txt) #任何非 index.php、images 和 robots.txt 的 HTTP 请求都被指向 index.php。
RewriteRule ^(.*)$ /index.php/$1 [L] #防盗链
RewriteCond %{HTTP_REFERER} !^$ #如果来源地址不为空
RewriteCond %{HTTP_REFERER} !^http://web1.com #如果不是以http://web1.com开头
RewriteCond %{REQUEST_FILENAME} .*\.(jpg|jpeg|gif|png) [NC] #如果访问的是图片
ReWriteRule .* no.png [L] #就定向到no.png上面去

1.注意它的顺序是从上到下,符合某一条件就不走下面条件;所以在写伪静态的时候要考虑这个先后顺序;

2.#注释号只能放在句首,不能放在句尾;

3.不需要重启Apache,立即生效;

最新文章

  1. MySQL Workbench建表时 PK NN UQ BIN UN ZF AI 的含义
  2. codevs 3369 膜拜
  3. UIScrollViewDelegate
  4. andriod终端操作命令
  5. iOS7 中的statusbar的隐藏和样式更改
  6. Delphi XE5 如何与其他版本共存
  7. android电池管理系统从上层的java到底层驱动的调用(转载)
  8. (二)CodeMirror - 配置项
  9. js两个日期对比大小
  10. java 加载dll介绍(转)
  11. 解决:wordpress error establishing a database connection problem
  12. eclipse中Maven工程使用Tomcat7以上插件
  13. Sprite子节点透明度不能跟随父节点变化的问题求解(转)
  14. ODS ,EDW,DM
  15. EasyUI ComboGrid 笔记(支持分页)
  16. 24小时学通Linux内核之向内核添加代码
  17. (4.28)for xml path 在合并拆分上的作用演示
  18. OAuth和OpenID的区别
  19. [转]jvm加载类规则
  20. Python3 中使用sys.argv详解

热门文章

  1. Orchard工作原理
  2. Kinect帮助文档翻译之三 多场景
  3. c++实例化对象
  4. postmortem report of period M1
  5. adb怎么判断是否有root权限,并更改system/app内容
  6. 7、android的button如何平铺一张图片?
  7. 【Binary Tree Maximum Path Sum】cpp
  8. 关于myeclipse代码提示的一些问题
  9. BZOJ1500 维修数列
  10. Leetcode#90 Subsets II