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 重定向问题解析 #### 一、Apache Rewrite Module 概述 Apache的Rewrite Module(重写模块)是Apache服务器中一个非常强大的工具,主要用于URL重写及重定向功能。它通过一系列规则对请求...
平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等 2.Apache Rewrite的配置 Apache下的Rewrite配置主要有两种,一种是针对整个apache服务器的配置,此种配置的Rewrite规则是直接在httpd.conf下书写。...
Apache Rewrite Rule是Apache服务器中的一种功能,用于URL重写,它是Apache HTTP服务器的mod_rewrite模块的核心功能。这个功能使得Web服务器能够根据预定义的规则,将用户请求的URL转换为另一种形式,通常是为了优化...
apache_rewrite语法的详细解析,实现php的URL重写。
模块`mod_rewrite`是Apache的一个核心模块,它提供了URL重写和URL路由的能力,这对于创建SEO友好的伪静态URL、实现URL短链、隐藏真实路径等场景非常有用。在`.htaccess`文件中启用`mod_rewrite`模块,你需要开启...
Apache的mod_rewrite模块是Web服务器中的一个强大工具,它允许我们通过定义规则来重写URL,从而实现诸如URL美化、隐藏真实路径、实现重定向等多种功能。以下是对Apache rewrite重写参数及其用法的详细说明: 1. **R...
在Apache配置文件`httpd.conf`或`.htaccess`中,你可以通过`RewriteEngine`指令启用Rewrite模块,并使用`RewriteRule`指令定义URL重写规则。例如: ```apacheconf RewriteEngine On RewriteRule ^old-page.html$ /...
为了让客户不会因此受到任何影响,最好的方法就是使用Apache Rewrite Rule(重写规则)。 二、重写规则的作用范围 —- 1.使用在Apache主配置文件httpd.conf中。 —- 2.使用在httpd.conf里定义的配置中。 ...
Apache Rewrite 规则是Apache HTTP服务器中的一个模块mod_rewrite的功能,用于URL重写和路由重定向。这个功能在网站优化、动态URL转换为静态URL、实现URL隐藏、以及访问控制等方面非常有用。在这个特定的需求中,...
《Linux Apache Rewrite编译配置详解》 Apache Rewrite模块是Apache HTTP服务器中的一个重要组件,主要用于URL重写和路由重定向。这个模块使得我们能够基于正则表达式对请求的URL进行动态转换,从而实现诸如隐藏...
Apache Rewrite 防盗链三例 Apache Rewrite 是一个功能强大的 URL 重写模块,可以用来实现防盗链、 URL 重写、重定向等功能。防盗链是指防止其他网站非法使用本站的资源,例如图片、视频、CSS、JS 等。下面是三个...
以下是对标题和描述中提到的13个实用的Apache Rewrite重写规则的详细解释: 1. **去除www前缀**:这个规则用于将URL中的 "www" 前缀去掉,统一域名格式。当HTTP_HOST不等于 `jb51.net` 时,规则将URL重定向至无 ...
### Apache mod_rewrite模块使用教程 #### 一、引言 Apache服务器是一款广泛使用的Web服务器软件,支持多种操作系统,包括Windows和Linux。为了更好地管理和优化网站的URL结构,Apache提供了强大的`mod_rewrite`...
Apache Rewrite模块是一个强大的URL重写工具,主要用于实现URL的跳转和重定向,它基于Perl兼容正则表达式(PCRE)语法。该模块可以在服务器配置级别(httpd.conf)和目录配置级别(.htaccess)进行使用。启用Rewrite...