http://apache.chinahtml.com/rewrite/rewrite_guide.html
http://apps.hi.baidu.com/share/detail/19966800
http://www.okajax.com/a/201106/apache_rewrite.html
引用
现在我们了解一下 Apache Rewrite 的重写规则的具体指令吧.
重写规则具体有 RewriteBase, RewriteCond, RewriteEngine, RewriteLock, RewriteLog, RewriteLogLevel, RewriteMap, RewriteOptions, RewriteRule 九个指令. 通常最常用的是 RewriteEngine, RewriteBase, RewriteCond, RewriteRule 四个指令. 这个我们要重点讲解的. 如果这四个指令运用的比较熟练的话, 不是特别的网站. 基本上你想出什么样的URL 都可以满足你的需要了. 其他的指令就不在讲解了. 如果对前面说的4个指令比较熟悉的话. 剩下的去看看 apache 的手册. 相信掌握这些不会费你很多脑筋.
RewriteEngine 这个指令就不用说了. 就是是否使用 Rewrite 模式的开关, 使用就设置成 on, 否则设置成 off 作用域在: server config, virtual host, directory, .htaccess
我们这篇日志专门讲解: RewriteBase
RewriteBase 的作用域为: directory, .htaccess
通常默认的虚拟主机的网站在使用.htaccess 进行重写规则时不需要执行设置该指令. 因为 RewriteBase 默认值是该 .htaccess 文件所在的目录地址.
但是如果使用目录别名的话就需要设置这个指令了. 先看官方手册的例子. 假设一个网站目录使用了别名操作: Alias /xyz /abc/def 那么当客户端访问/xyz/xxx.html 文件时是相当于访问 /abc/def/xxx.html的. 然后看看在使用了别名的情况下重写效果. 当然这个 .htaccess 文件在 /abc/def/.htaccess 位置. 内容如下:
RewriteEngine On
RewriteBase /xyz
RewriteRule ^oldstuff\.html$ newstuff.html
假设访问服务器的: /xyz/oldstuff.html (比如: http://www.test.com/xyz/oldstuff.html 这样).
服务器处理流程大概是下面的样子.
第一步, 把alias别名还原成真实的路径:
/xyz/oldstuff.html -> /abc/def/oldstuff.html (per-server Alias)
第二步, rewrite前会去掉前缀(也就是.htaccess文件所在的目录部分这里是/abc/def/), 然后执行重写规则, 处理完之后再把前缀添加上去:
/abc/def/oldstuff.html -> /abc/def/newstuff.html (per-dir RewriteRule)
第三步, 由于设定了RewriteBase值,所以路径最后还是被还原回去:
/abc/def/newstuff.html -> /xyz/newstuff.html (per-dir RewriteBase)
第四步, 重写规则完成, 别名再次使用. 最后得到的结果:
/xyz/newstuff.html -> /abc/def/newstuff.html (per-server Alias)
实际上相当于请求: /abc/def/newstuff.html, 关于 alias 的用法和意思, 请另行参考 apache 手册.
这里要注意的是即使RewriteBase /xyz 这行被注释掉. 服务器还是会执行上面的 第一步, 第二步, 后面的不会被执行, 服务器执行完第二步以后就发出一个内部重定向. 按照上面的例子也就是 GET /abc/def/newstuff.html, 由于GET 模式获取到第一个是/开头的, 相当于请求DocumentRoot目录下的/abc/def/newstuff.html, 换成客户端请求的模式也就是 http://www.test.com/xyz/oldstuff.html 变成了 http://www.test.com/abc/def/newstuff.html 如果 /xyz 只是目录的别名, DocumentRoot 目录下根本没有实际的物理目录 abc/def 这样最终会导致一个 404 报错.
分享到:
相关推荐
Apache Rewrite Module 重定向 偏避的注意点
平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等 2.Apache Rewrite的配置 Apache下的Rewrite配置主要有两种,一种是针对整个apache服务器的配置,此种配置的Rewrite规则是直接在httpd.conf下书写。...
apache_rewrite语法的详细解析,实现php的URL重写。
apache rewrite rule: 介绍详细
到英文网站 才找到的 答案 (已译成中文)
Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式
为了让客户不会因此受到任何影响,最好的方法就是使用Apache Rewrite Rule(重写规则)。 二、重写规则的作用范围 —- 1.使用在Apache主配置文件httpd.conf中。 —- 2.使用在httpd.conf里定义的配置中。 ...
Apache的rewrite的重写非常常用,现总结了一下.
apache rewrite_module模块使用教程
NULL 博文链接:https://newtime.iteye.com/blog/450305
需求: 六个文件的入口,其他都重定向到index 自己的思路: 正则找出不是六个文件的URL的模式,进行过滤。 对比同事的结果,自己思路的问题: 1....—————- 思路错误,应该 制定白名单, ...
apache rewrite防盗链三例
主要介绍了13个实用的Apache Rewrite重写规则,需要的朋友可以参考下
Apache 1.x 的用户请检查 conf/httpd.conf 中是否存在如下两段代码: LoadModule rewrite_module libexec/mod_rewrite.so AddModule mod_rewrite.c Apache 2.x 的用户请检查 conf/httpd.conf 中是否存在如下一段...
很多很想要的Shopex4.8.5伪静态2.0版本而非网上到处流传的3.0版本。 亲测可用。可以在IIS6.0/7.0上完美执行。