`
greenwen
  • 浏览: 220772 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Apache环境下配置Rewrite规则

阅读更多
源自:http://www.eygle.com/digest/2005/09/apache_oeoeooaeuooa_rewrite.html
一:目的

本文旨在提供如何用Apache重写规则来解决一些常见的URL重写方法的问题,通过常见的
实例给用户一些使用重写规则的基本方法和线索。

二:为什么需要用重写规则?
一个网站,如果是长期需要放在internet上提供服务,必定会有不断地更新和维护,如临
时转移到其它服务器进行维护,重新组织目录结构,变换URL甚至改变到新的域名等等,
而为了让客户不会因此受到任何影响,最好的方法就是使用Apache Rewrite Rule(重写
规则)。

三: 重写规则的作用范围
1) 可以使用在Apache主配置文件httpd.conf中
2) 可以使用在httpd.conf里定义的虚拟主机配置中
3) 可以使用在基本目录的跨越配置文件.htaccess中

四:重写规则的应用条件
只有当用户的WEB请求最终被导向到某台WEB服务器的Apache后台,则这台WEB服务器接受
进来的请求,根据配置文件该请求是主配置还是虚拟主机,再根据用户在浏览器中请求的
URI来配对重写规则并且根据实际的请求路径配对.htaccess中的重写规则。最后把请求
的内容传回给用户,该响应可能有两种:

1) 对浏览器请求内容的外部重定向(Redirect)到另一个URL。
让浏览器再次以新的URI发出请求(R=301或者R=302,临时的或是永久的重定向)
如:一个网站有正规的URL和别名URL,对别名URL进行重定向到正规URL,或者网站改换
成了新的域名
则把旧的域名重定向到新的域名(Redirect)

2) 也可能是由Apache内部子请求代理产生新的内容送回给客户[P,L]
这是Apache内部根据重写后的URI内部通过代理模块请求内容并送回内容给客户,而客户
端浏览器并
不知道,浏览器中的URI不会被重写。但实际内容被Apache根据重写规则后的URI得到。
如:在公司防火墙上运行的Apache启动这种代理重写规则,代理对内部网段上的WEB服务
器的请求。

五:重写规则怎样工作?
我们假定在编译Apache时已经把mod_rewrite编译成模块,确信你的httpd.conf中有
LoadModule rewrite_module libexec/mod_rewrite.so
并且在Addmodule中有
Addmodule mod_rewrite.c
则可以使用重写规则。
当外部请求来到Apache,Apache调用重写规则中的定义来重写由用户浏览器指定请求的
URI,最后被重写的URI如果是重定向,则送由浏览器作再一次请求;如果是代理则把重写
后的URI交给代理模块请求最终的内容(Content),最后把内容送回给浏览器。

六: 何时使用.htaccess中的重写规则定义?
假如你对你的的网站内容所在的服务器没有管理员权限,或者你的网站放在ISP的服务器
上托管等等条件下,你无法改写主配置文件,然而你可以对你的WEB站点内容所在的目录
有写权限,则你可以设置自己的.htaccess
文件达到同样的目的。但你需要确定主配置文件中对你的网站所在的目录定义了下面的内
容:

Options Indexes FollowSymLinks
AllowOverride all

否则你的.htaccess不会工作。

七: 应用举例
假定Apache被编译安装在主机192.168.1.56的/usr/local/apache/ 目录下面,我们编
译进了重写和代理模块。

1) 隐藏Apache下的某个目录,使得对该目录的任何请求都重定向到另一个文件。

a> httpd.conf的实现方法

我们放下面的部分到/usr/local/apache/conf/httpd.conf


options Indexes followsymlinks
allowoverride all
rewriteengine on
rewritebase /
rewriterule ^(.*)$ index.html.en [R=301]


注:rewriteengine on 为重写引擎开关,如果设为off,则任何重写规则定义将不被应
用,该开关的另一好处就是如果为了临时拿掉重写规则,则改为off再重启动Apache即
可,不必将下面一条条的重写规则注释掉。
rewritebase / 的作用是如果在下面的rewriterule定义中被重写后的部分(此处为文件
名index.html.en)前面没有/,则是相对目录,相对于这个rewritebase后面的定义也就
是/usr/local/apache/htdocs/index.html.en,否则,如果此处没有rewritebase /这
一项,则被重写成
http://192.168.1.56/usr/local/apache/htdocs/manual/index.html.en ,显然是
不正确的。

不过这里我们也可以不用rewritebase / , 而改为
rewriteengine on
rewriterule ^(.*)$ /index.html.en [R=301]
或者
rewriteengine on
rewriterule ^(.*)$ http://192.168.1.56/index.html.en [R=301]

b> .htaccess的实现方法

我们先放下面的部分到httpd.conf


options Indexes followsymlinks
allowoverride all


然后放下面的部分到/usr/local/apache/htdocs/manual/.htaccess中
rewriteengine on
rewritebase /
rewriterule ^(.*)$ index.html.en [R=301]

注:对文件.htaccess所作的任何改动不需要重启动Apache.

问:要是把这个manual目录重定向到用户jephe的自己的主目录呢?
用下面的.htaccess方案。
rewriteengine on
rewritebase /~jephe/
rewriterule ^(.*)$ $1 [R=301]

则对manual目录下任何文件的请求被重定向到~jephe目录下相同文件的请求。

2) 转换www.username.domain.com的对于username的主页请求为
www.domain.com/username

对于HTTP/1.1的请求包括一个Host: HTTP头,我们能用下面的规则集重写
http://www.username.domain.com/anypath 到 /home/username/anypath

Rewriteengine on
rewritecond %{HTTP_HOST} ^www\.[^.]+\.host\.com$
rewriterule ^(.+) %{HTTP_HOST}$1 [C]
rewriterule ^www\.([^.]+)\.host\.com(.*) /home/$1$2

注:
rewritecond 条件重写规则,当满足后面定义的条件后才会应用下面的重写规则,
rewritecond有各种变量
,请查阅相关文档。

3) 防火墙上的重写规则代理内部网段上服务器的请求。

NameVirtualhost 1.2.3.4


servername www.domain.com
rewriteengine on
proxyrequest on
rewriterule ^/(.*)$ http://192.168.1.3/$1 [P,L]


注:当外部浏览器请求www.domain.com时被解析到IP地址1.2.3.4 ,Apache 交出
mod_rewrite处理转换成
http://192.168.1.3/$1后再交由代理模块mod_proxy得到内容后传送回用户的浏览器。


4) 基本预先设定的转换MAP表进行重写 rewritemap

转换www.domain.com/{countrycode}/anypath 到Map表中规定的URI,上面是虚拟主机
中的定义

rewritelog /usr/local/apache/logs/rewrite.log
rewriteloglevel 9

rewriteengine on
proxyrequest on
rewritemap sitemap txt:/usr/local/apache/conf/rewrite.map
rewriterule ^/([^/]+)+/(.*)$ http://%{REMOTE_HOST}::$1 [C]
rewriterule (.*)::([a-z]+)$ ${sitemap:$2|http://h.i.j.k/} [R=301,L]

文件/usr/local/apache/conf/rewrite.map的内容如下:

sg http://a.b.c.d/
sh http://e.f.g.h/

注: 当用户请求http://www.domain.com/sg/anypath时被重写为
http://a.b.c.d/anypath .
当需要调试时请用rewritelog and rewriteloglevel 9联合,9为最大即得到最多的调试
信息
最小为1,最小的调试信息,默认为0,没有调试信息。
sitemap的语法是${sitemap: LookupKey | Defaultvalue} ,有些书上把$写成了%是错
误的。
分享到:
评论

相关推荐

    如何在Apache 服务器下配置URL 静态化的 Rewrite 规则.docx

    ### 如何在Apache服务器下配置URL静态化的Rewrite规则 #### 一、了解URL静态化与Rewrite规则 ...通过以上步骤,可以在Apache服务器环境下成功配置URL静态化的Rewrite规则,从而提升网站的SEO表现和用户体验。

    Apache服务器下配置URL 态化的Rewrite规则.docx

    如果这些配置已经存在,你可以在httpd.conf文件中或特定的VirtualHost配置块内添加Rewrite规则。例如,对于Discuz! 6.1.0,你可以使用以下示例规则: ```apacheconfig IfModule mod_Rewrite.c RewriteEngine On ...

    Discuz! X2 配置URL伪静态Rewrite规则

    Discuz! X2 配置URL伪静态Rewrite规则,里面详细讲解了apache服务器下 Discuz! X2 配置URL伪静态Rewrite规则和IIS下得Discuz! X2 配置URL伪静态Rewrite规则

    Apache URL Rewrite功能配置

    ### Apache URL Rewrite功能配置知识点详解 #### 一、Apache URL Rewrite简介 Apache URL Rewrite功能是Apache Web服务器的一...- **测试**:在正式环境中部署之前,务必充分测试URL Rewrite规则,确保其按预期工作。

    专业针对DZ6[1].0+DZ6.1论坛+UCHome Rewrite规则.rar

    本知识点将详细讲解如何为DZ6.0及DZ6.1论坛和UCHome配置Rewrite规则,以实现URL的伪静态化,提升网站的SEO友好性和用户体验。 首先,Rewrite规则是一种基于Apache服务器的mod_rewrite模块功能,它允许我们通过定义...

    Apache的ReWrite的应用

    在Apache配置文件`httpd.conf`或`.htaccess`中,你可以通过`RewriteEngine`指令启用Rewrite模块,并使用`RewriteRule`指令定义URL重写规则。例如: ```apacheconf RewriteEngine On RewriteRule ^old-page.html$ /...

    Apache Rewrite Module 的重定向问题

    5. **调试与测试**:在实际部署之前,建议先在本地环境中充分测试Rewrite规则。可以利用`ErrorLog`等日志文件来追踪Rewrite引擎的工作过程,以便发现问题并及时调整。 通过上述介绍,我们可以看到Apache Rewrite ...

    让IIS支持Apache .htaccess 伪静态规则

    这使得在不改变原有规则的情况下,能够在IIS环境中顺利运行原本在Apache上构建的网站。 总之,让IIS支持Apache的.htaccess伪静态规则主要依赖于ISAPI_Rewrite这样的第三方工具。通过配置ISAPI筛选器、创建和转换...

    nginx设置rewrite规则

    在配置rewrite规则时,要注意以下几点: 1. 正确使用正则表达式,避免出现无限循环或误匹配。 2. 确保Nginx能正确识别和解析规则,避免语法错误。 3. 使用last、break、redirect、permanent标志,明确规则执行的逻辑...

    Apache的Mode Rewrite模块和.htaccess文件配合.docx

    在Mac OS X下,需要在/etc/apache2/httpd.conf文件中启用Mode Rewrite模块,然后在/private/etc/apache2/users/[用户名].conf文件中添加Rewrite规则。 四、Wordpress固定链接的实现 Wordpress固定的链接是指使用...

    linux_apache_rewrite编译配置.pdf

    接下来,我们可以在网站根目录下的.htaccess文件或者httpd.conf中定义Rewrite规则。例如,将所有请求重定向到/new/index.htm,同时在浏览器中显示原URL,可以写入以下规则: ```apacheconf RewriteEngine On ...

    discuz的rewrite规则下载

    1. **Apache配置文件**:`httpd.ini`是Apache服务器的一个配置文件,它包含了各种配置指令,其中包括URL重写规则。 2. **RewriteEngine**:用于开启或关闭重写引擎。 3. **RewriteRule**:是重写规则的核心,用于...

    Apache Rewrite url重定向功能的简单配置

    平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等 2.Apache Rewrite的配置 Apache下的Rewrite配置主要有两种,一种是针对整个apache服务器的配置,此种配置的Rewrite规则是直接在httpd.conf下书写。配置步骤...

    Apress.The.Definitive.Guide.to.Apache.mod.rewrite.Feb.2006.pdf

    本书详细阐述了 mod_rewrite 的工作原理,包括其语法、指令集以及如何在 Apache 配置文件(如 httpd.conf 或 .htaccess 文件)中正确配置这些规则。 ### 二、URL 重写规则详解 mod_rewrite 的核心是其规则设置,...

    关于Apache_mod_rewite的中文配置和RewriteRule规则详细介绍

    关于Apache_mod_rewrite的中文配置与RewriteRule规则详细介绍 在当今互联网时代,网站优化与安全性是网站管理员关注的焦点。Apache_mod_rewrite作为一个强大的工具,它不仅能够帮助网站优化URL结构,提升用户体验,...

    linux_apache_rewrite编译配置整理.pdf

    - 请确保在启用mod_rewrite之前,Apache配置文件没有禁用`AllowOverride`,否则`.htaccess`文件中的重写规则将无法生效。 - 为了调试重写规则,可以临时开启`RewriteLog`和`RewriteLogLevel`。 理解并熟练运用...

    Apache 服务器的配置

    Apache 服务器是互联网上最广泛使用的网页服务器,其在Linux环境下的配置对于系统管理员来说是一项基本技能。Apache的配置过程通常涉及多个步骤,包括下载、安装、配置以及启动服务。 首先,要安装Apache服务器,你...

    利用内部的映射函数扩展Apache的mod_rewrite.zip

    8. 配置与调试:在Apache配置中正确指定映射函数的路径,并启用mod_rewrite模块。使用Apache的`RewriteLogLevel`和`RewriteLog`指令进行日志记录和调试。 总结,利用内部映射函数扩展Apache的mod_rewrite,可以将...

Global site tag (gtag.js) - Google Analytics