.htaccess的重写规则

2021-03-22 15:18:27 浏览数 (1)

.htaccess基本语法和应用

.htaccess是Apache服务器的一个非常强大的分布式配置文件。 正确的理解和使用.htaccess文件,可以帮助我们优化自己的服务器或者虚拟主机。

如何启用htaccess

以windows为例,进入apache/conf目录,找到httpd.conf文件,去掉 LoadModule rewrite_module modules/mod_rewrite.so 前面的#,然后设置目录属性AllowOverride All,重启apache即可

常见格式

下面是一个典型的htaccess文件

代码语言:javascript复制
# 开启URL重写
RewriteEngine on
代码语言:javascript复制
# URL重写的作用域
RewriteBase /path/to/url
代码语言:javascript复制
# 满足怎样的条件
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
代码语言:javascript复制
# 应用怎样的规则
RewriteRule .? http://www.example.com%{REQUEST_URI} [R=301,L]

来看看RewriteCond,首先有一个%,因为{HTTP_HOST}是一个apache变量,需要用%来指示。从!开始就是匹配的条件,支持 正则。!表示不等于,这句话的意思就是:如果HTTP_HOST不是www.example.com。后面的[NC](no case)表示忽略大小写,常见的还有

  • [L](last):终止一系列的RewriteCond和RewriteRule
  • [R](redirect):触发一个显示的跳转,也可以指定跳转类型,如[R=301]
  • [F](forbidden):禁止查看特定文件,apache会触发403错误

典型应用

图片防盗链

代码语言:javascript复制
RewriteCond %{HTTP_REFERER} !^$
代码语言:javascript复制
RewriteCond %{HTTP_REFERER} !^http://(www.)?example.com/ [NC]
代码语言:javascript复制
RewriteRule .(gif|jpg|png)$ - [F]

由于是基于HTTP_REFERER的验证,所以只能防止一般的图片盗链,因为HTTP_REFERER是比较容易伪造的

自定义404错误页面 如果用户输入了一个不存在的url,那么就显示自定义的错误页面

代码语言:javascript复制
ErrorDocument 404 /404.html
# 其他同理
ErrorDocument 500 /500.html

处理移动过的文件

代码语言:javascript复制
Redirect 301 /old.html http://yoursite.com/new.html
代码语言:javascript复制
代码语言:javascript复制
# 也可以是下面这样
RewriteRule /old.html http://yoursite.com/new.html [R=301,L]
代码语言:javascript复制
代码语言:javascript复制
# 如果想隐式跳转(URL地址不变,但实际上内容是其他URL的),就使用下面的
RewriteRule /old.html http://yoursite.com/new.html [L]

对于RewriteRule还有好多文章可以做,比如

代码语言:javascript复制
代码语言:javascript复制
# 把html后缀的url链接到php文件
代码语言:javascript复制
# $1指代的是前面第1个用括号括起来的内容
RewriteRule ^/?([a-z/] ).html$ $1.php [L]
代码语言:javascript复制
# 或者把旧文件夹的内容链接到新文件夹
RewriteRule ^/?old_directory/([a-z/.] )$ new_directory/$1 [R=301,L]
代码语言:javascript复制
代码语言:javascript复制
# 隐藏文件名
RewriteRule ^/?([a-z] )$ $1.php [L]

禁止显示目录列表

如果目录里没有index文件,又没有对该目录做过特别的处理,尤其是windows主机,那么该目录里的内容就会显示出来,这时可以在根目录创建 一个.htaccess文件,然后写上

代码语言:javascript复制
Options -Indexes
# 就这么一句就搞定了

阻止/允许特定IP/IP段

代码语言:javascript复制
# 禁止所有IP,除了指定的
order deny,allow
deny from all
代码语言:javascript复制
# 如果想允许IP段,如123.123.123.0 ~ 123.123.123.255,则
代码语言:javascript复制
# allow from 123.123.123.
allow from 123.123.123.123
 
ErrorDocument 403 /page.html
 
<Files page.html>
allow from all
</Files>
代码语言:javascript复制
#如果想禁止特定IP
deny from 123.123.123.123

添加MIME类型

代码语言:javascript复制
AddType video/x-flv .flv
代码语言:javascript复制
# 如果设置类型为 application/octet-stream 将提示下载
AddType application/octet-stream .pdf

本文由来源 21aspnet,由 javajgs_com 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。

0 人点赞