最近复习了一下Apache Rewrite url重定向功能,有个项目用到了.htaccess,简单的几行代码,是看不怎么明白,于是复习了一下。

1.Apache Rewrite的主要功能
就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范。平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等

2.Apache Rewrite的配置
Apache下的Rewrite配置主要有两种,一种是针对整个apache服务器的配置,此种配置的Rewrite规则是直接在httpd.conf下书写。配置步骤如下:
(1)去除httpd.conf文件中"#LoadModule rewrite_module modules/mod_rewrite.so"前面的"#"号;
(2)然后再在httpd.conf中书写如下规则:
RewriteEngine on
#当访问任何以t_开头,以.html结尾的文件时,将$1用与(.*)匹配的字符替换后,访问相应的test.php页面
RewriteRule ^/t_(.*).html$ /test.php?id=$1

另一种是针对apache服务器下的某一目录的配置,此种配置的Rewrite规则需在此目录下建立一个.htaccess文件来书写。配置步骤如下:

(1)去除httpd.conf文件中"#LoadModule rewrite_module modules/mod_rewrite.so"前面的"#"号; 
(2)修改httpd.conf文件中的"AllowOverride None"为"AllowOverride all",同时最好将Options也置为"all",否则可能会出问题。 
(3)在目录中建立.htaccess文件,并用记事本打开,书写如下规则: 
RewriteEngine on 
RewriteRule ^/t_(.*).html$ /test.php?id=$1

3.Apache Rewrite规则的书写 
RewriteEngine on 
RewriteRule ^/test([0-9]*).html$ /test.php?id=$1 
RewriteRule ^/new([0-9]*)/$ /new.php?id=$1 [R]

举例:

RewriteEngine on
#当我们访问的地址不是以www..com开头的,那么执行下一条规则
RewriteCond %{HTTP_HOST} !^www..com [NC]
RewriteRule ^/(.*) http://www.163.com/ [L]

4.Apache Rewrite规则修正符 
1) R 强制外部重定向 
2) F 禁用URL,返回403HTTP状态码。 
3) G 强制URL为GONE,返回410HTTP状态码。 
4) P 强制使用代理转发。 
5) L 表明当前规则是最后一条规则,停止分析以后规则的重写。 
6) N 重新从第一条规则开始运行重写过程。 
7) C 与下一条规则关联

如果规则匹配则正常处理,以下修正符无效
8) T=MIME-type(force MIME type) 强制MIME类型 
9) NS 只用于不是内部子请求 
10) NC 不区分大小写 
11) QSA 追加请求字符串
12) NE 不在输出转义特殊字符 \%3d$1 等价于 =$1

5 重写中设计到的特殊字符的含义【与正则表达式有些相似】

*代表前面0或更多个字符
+代表前面1或更多个字符
?代表前面0或1个字符
^代表字符串的开始位置
$代表字符串结束的位置
。为通配符,代表任何字符
\将跟在其后的字符还原为字符本身,例如“\+”代表的就是“+”,而非其它意思。
^在方括号里表示非的意思。例如[^.]代表非通配符。
 
6 举例1:
如果文件不存在重定向到404页面
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? /.php [L]

这里-f匹配的是存在的文件名,-d匹配的存在的路径名。这段代码在进行404重定向之前,会判断你的文件名以及路径名是否存在【请注意这里】。你还可以在404页面上加一个?url=$1参数:

RewriteRule ^/?(.*)$ /.php?url=$ [L]

7 举例2:

伪静态尝试

RewriteEngine on

RewriteRule ^test([-]*).html$ /index.php?id=$1
容易引申的伪静态例子

8 举例3:

将.html后缀名转换成.php

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

最新文章

  1. js立即执行函数
  2. 计算c字符的长度,保证不超过2^30
  3. GNU libc (Glibc) 2.18 发布
  4. 基于centos搭建nginx+uwsgi运行django环境
  5. Lambda表达式的由来
  6. 1032 - Intersecting Dates
  7. shell命令前后端切换和暂停
  8. jquery中利用队列依次执行动画
  9. 在sql中case子句的两种形式
  10. javascript高级程序设计第3版——第10章 DOM
  11. C#实现按键计算器功能
  12. RHEL7恢复root密码
  13. ASP.NET Identity详解
  14. Vue SSR 配合Java的Javascript引擎j2v8实现服务端渲染4支持构建bundle
  15. RF基础(一) RF内建函数库BuiltIn
  16. mysql sleep连接过多解决办法
  17. js延迟几秒执行
  18. security权限控制
  19. 用Html5制作的一款数学教学程序Function Graphics(绘制函数图的程序)
  20. DELL PowerEdge R410系统日志满报错

热门文章

  1. php遍历所有文件
  2. Maven(八) Maven项目和testng结合应用
  3. U3D SCENEMANAGER.LOADSCENE是半异步的
  4. Android gralloc 模块实例
  5. sass compact方法的实现
  6. Linux中shell变量$0,$?等含义
  7. 图片上传jQuery插件(兼容IE8)
  8. 安装 ORACLE 11G出现Error Message:PRVF-7535
  9. Shiro和Spring 集合实现同一个账号只能一个人在线使用,其它人在使用进行剔除(八)
  10. 2.QWidget类