Apache运维基础5Apache的Rewrite攻略2htaccess文件

7次阅读

共计 1883 个字符,预计需要花费 5 分钟才能阅读完成。

简述

.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,立即生效;

正文完
 0