htaccess文件格式

htaccess

htaccess文件简介

htaccess文件是Apache服务器中的一个配置文件,负责相关目录下的网页配置
/www/html下的.htaccess文件与主配置文件中段中内容完全等效
.htaccess文件中的配置指令作用于.htaccess文件所在的目录及其所有子目录
且子目录中的指令会覆盖父目录或者主配置文件中的指令

rewrite的语法格式:

  1. RewriteEngine On #启用rewrite起作用。
  2. RewriteBase url-path #设定基准目录。
  3. RewriteCond test-string condPattern #用于测试rewrite的匹配条件。
  4. RewriteRule Pattern Substitution #规则

RewriteEngine On|Off

RewriteEngine 用于开启或停用rewrite功能。rewrite configurations 不会自动继承

RewriteBase URL-path

RewriteBase用于设定重写的基准URL
RewriteRule可以用于目录级的配置文件中 (.htaccess)并在局部范围内起作用
即规则实际处理的只是剥离了本地路径前缀的一部分
处理结束后,这个路径会被自动地附着回去
默认值是”RewriteBase physical-directory-path”

RewriteCond TestString CondPattern [flags]

RewriteCond指令定义了一个规则的条件,即,在一个RewriteRule指令之前有一个或多个RewriteCond指令
条件之后的重写规则仅在当前URI与pattern匹配并且符合这些条件的时候才会起作用
TestString是一个纯文本的字符串
但是还可以包含下列可扩展的成分:

1
2
3
4
+RewriteRule反向引用: 引用方法是 $N (0 <= N <= 9) 引用当前(带有若干RewriteCond指令的)RewriteRule中的与pattern匹配的分组成分(圆括号!)
+RewriteCond反向引用: 引用方法是 %N (1 <= N <= 9) 引用当前若干RewriteCond条件中最后符合的条件中的分组成分(圆括号!)
+RewriteMap 扩展: 引用方法是 ${mapname:key|default} + 服务器变量: 引用方法是 %{ NAME_OF_VARIABLE } CondPattern是条件参数
Flags标识是是第三个参数,可选OR、AND、NC,默认为AND

RewriteRule Pattern Substitution [Flags]

其中的Pattern就是参数,一般为一些文件的扩展名
Substitution是用来替换前面用的,这儿的Flags
常用的R表示 redirect(强制重定向),F表示forbidden(禁止访问),L表示last(最后)
通常当你希望停止重写操作而立即重定向时,可用它

.htaccess文件URL重写写法例子

1. 反盗链

1
2
3
4
RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?yoursite.com/.*$ [NC]
RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]

2. 防止目录浏览

1
Options All -Indexes

3. SEO友好的301永久重定向

1
Redirect 301 http://www.yoursite.com/article.html http://www.yoursite.com/archives/article

4. 显示个性化的 404 错误页面

1
ErrorDocument 404 /404.html

5. 设置目录的默认页面

假如你需要为不同的目录设置不同的默认页面,你可以很容易的通过 .htaccess 实现:

1
DirectoryIndex about.html

6. 基于referer来限制网站访问

1
2
3
4
5
<IfModule mod_rewrite.c>
RewriteEngine on RewriteCond %{HTTP_REFERER} spamteam.com [NC,OR]
RewriteCond %{HTTP_REFERER} trollteam.com [NC,OR]
RewriteRule .* – [F]
</ifModule>

7. 限制PHP上传文件大小

1
2
3
4
php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value max_execution_time 200
php_value max_input_time 200

8. 通过压缩文件来减少网络流量

1
2
3
4
5
6
7
8
9
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

9. 缓存文件

1
2
3
<FilesMatch “.(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$”>
Header set Cache-Control “max-age=2592000〃
</FilesMatch>

10. 添加尾部的反斜杠

1
2
3
4
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
</IfModule>

11. 处理移动过的文件

1
Redirect 301 /old.html http://yoursite.com/new.html

或者是

1
RewriteRule /old.html http://yoursite.com/new.html [R=301,L]

如果想隐式跳转

1
RewriteRule /old.html http://yoursite.com/new.html [L]

12. html后缀的url链接到php文件

1
RewriteRule ^/?([a-z/]+)\.html$ $1.php [L]

13. 旧文件夹的内容链接到新文件夹

1
RewriteRule ^/?old_directory/([a-z/.]+)$ new_directory/$1 [R=301,L]

14. 隐藏文件名

1
RewriteRule ^/?([a-z]+)$ $1.php [L]

15. 阻止/允许特定IP/IP段

禁止所有IP,除了指定的

1
2
order deny,allow
deny from all

如果想允许IP段,如123.123.123.0 ~ 123.123.123.255,则

1
2
3
4
5
6
7
8
allow from 123.123.123.
allow from 123.123.123.123

ErrorDocument 403 /page.html

<Files page.html>
allow from all
</Files>

如果想禁止特定IP

1
deny from 123.123.123.123

16. 添加MIME类型

1
AddType video/x-flv .flv

如果设置类型为 application/octet-stream 将提示下载

1
AddType application/octet-stream .pdf