`
wangzhen5
  • 浏览: 80843 次
  • 性别: Icon_minigender_1
  • 来自: 河南省
社区版块
存档分类
最新评论

Apache rewrite重写规则的常见应用

阅读更多
文旨在提供如何用Apache重写规则来解决一些常见的URL重写方法的问题,通过常见的实例给用户一些使用重写规则的基本方法和线索。
一、为什么需要用重写规则
---- 网站的生命在于不断地进行更新和维护,根据业务发展的需求转移服务器进行维护、重新组织目录结构、变换URL甚至改变到新的域名等

情况是经常发生的。为了让客户不会因此受到任何影响,最好的方法就是使用Apache Rewrite Rule(重写规则)。
二、重写规则的作用范围
---- 1.使用在Apache主配置文件httpd.conf中。
---- 2.使用在httpd.conf里定义的配置中。
---- 3.使用在基本目录的跨越配置文件.htaccess中。
三、重写规则的应用条件
---- 当用户的Web请求最终被导向到某台Web服务器的Apache守护进程,Apache根据配置文件判断该请求是主配置还是,再根据用户在浏览

器中请求的URL来匹配重写规则,并且根据实际的请求路径匹配.htaccess中的重写规则,最后把请求的内容传回给用户。该响应可能有2种。
---- 1.将请求内容外部重定向(Redirect)到另一个URL
---- 让浏览器再次以新的URL发出请求(R=301或者R=302,临时的或是永久的重定向)。
---- 例如,一个网站有正规的URL和别名URL,对别名URL进行重定向到正规URL,或者网站改换成了新的域名,则把旧的域名重定向到新的域

名。
---- 2.由Apache内部子请求代理产生新的内容送回给客户[P,L]
---- 这是Apache内部根据重写后的URL,通过代理模块请求内容并将最终内容送回给客户,客户端浏览器不必再次请求,浏览器中的URL不会

被重写,但实际内容由Apache根据重写规则后的URL生成。
---- 例如,在公司防火墙上运行的Apache启动这种代理重写规则,代理对内部网段上的Web服务器的请求。
四、重写规则怎样工作
---- 我们假定在编译Apache时已经把mod_rewrite编译成模块,确信您的httpd.conf中有LoadModule rewrite_module libexec/mod_rewrite.so

,并且在Addmodule中有Addmodule mod_rewrite.c,则可以使用重写规则。
---- 当外部请求到达Apache,Apache调用重写规则中的定义来重写由用户浏览器指定请求的URL,最后被重写的URL如果是重定向,则送交浏

览器做再一次请求;如果是代理则把重写后的URL交给代理模块请求最终的内容(Content),最后把内容送回给浏览器。
五、何时使用.htaccess中的重写规则定义
---- 假如您对网站内容所在的服务器没有管理员权限,或者您的网站内容放在ISP的服务器上托管,无法改写主配置文件,但是您对Web站点

内容所在的目录有写权限,则可以设置自己的.htaccess文件达到同样的目的。但您需要确定主配置文件中对您的网站所在的目录定义了下面的

内容,否则您的.htaccess不会工作。
---- < Directory /usr/local/apache/htdocs/www.abc.com> options indexes followsymLinks
---- allowoverride all
---- < /Directory >
六、应用举例
---- 假定Apache被编译安装在主机192.168.1.56的/usr/local/apache目录下面,同时编译了重写和代理模块。
---- 1.隐藏Apache下的某个目录,使得对该目录的任何请求都重定向到另一个文件
---- (1)httpd.conf的实现方法
---- 我们将下面的部分放到/usr/local/apache/conf/httpd.conf中。
---- < Directory "/usr/local/apache/htdocs/manual/"> options Indexes followsymlinks
---- allowoverride all
---- rewriteengine on
---- rewritebase /
---- rewriterule ^(.*)$ index.html.en [R=301]
---- < /Directory >
---- 注: “rewriteengine on”为重写引擎开关,如果设为“off”,则任何重写规则定义将不被应用,该开关的另一用处就是如果为了临时去掉重写

规则,可以将引擎开关设为“off”再重新启动Apache即可,不必将其中的各条重写规则注释掉。
---- “rewritebase /”的作用是如果在下面的rewriterule定义中被重写后的部分(此处为文件名index.html.en)前面没有“/”,则表明是相对目录,相

对于这个rewritebase后面的定义也就是/usr/local/apache/htdocs/index.html.en,否则,如果此处没有“rewritebase /”这一项,则被重写成,显

然是不正确的。
---- 我们也可以不用“rewritebase /”,而是将其改为如下部分。
---- rewriteengine on
---- rewriterule ^(.*)$ /index.html.en [R=301]
---- 或者更改为:
---- rewriteengine on
---- rewriterule ^(.*)$ [R=301]
---- (2).htaccess的实现方法
---- 我们将下面的部分放到httpd.conf中。
---- < Directory "/usr/local/apache/htdocs/manual/"> options Indexes followsymlinks
---- allowoverride all
---- < /Directory >
---- 然后将下面的部分放到/usr/local/apache/htdocs/manual/.htaccess中。
---- rewriteengine on
---- rewritebase /
---- rewriterule ^(.*)$ index.html.en [R=301]
---- 注: 对文件.htaccess所做的任何改动不需要重启动Apache。
---- 您还可以利用.htaccess方案将这个manual目录重定向到用户jephe自己的主目录。
---- rewriteengine on
---- rewritebase /~jephe/
---- rewriterule ^(.*)$ $1 [R=301]
---- 这样,对manual目录下任何文件的请求被重定向到~jephe目录下相同文件的请求。
---- 2.将对于username的主页请求转换为对的请求
---- 对于HTTP/1.1的请求包括一个Host: HTTP头,我们能用下面的规则集重写 .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
---- < Virtualhost 1.2.3.4:80 > servername
---- rewriteengine on
---- proxyrequest on
---- rewriterule ^/(.*)$ [P,L]
---- < /Virtualhost >
---- 注: 当外部浏览器请求时,将被解析到IP地址1.2.3.4,Apache交由mod_rewrite处理,转换成后再交由代理模块mod_proxy,得到内容后

传送回用户的浏览器。
---- 4.基本预先设定的转换Map表进行重写rewritemap
---- 转换到Map表中规定的URL,前面是中的定义。
---- rewritelog /usr/local/apache/logs/rewrite.log
---- rewriteloglevel 9
---- rewriteengine on
---- proxyrequest on
---- rewritemap sitemap txt:/usr/local/apache/conf/rewrite.map
---- rewriterule ^/([^/]+)+/(.*)$ [C]
---- rewriterule (.*)::([a-z]+)$ ${sitemap:$2|http://h.i.j.k/} [R=301,L]
---- 文件/usr/local/apache/conf/rewrite.map的内容如下:
---- sg
---- sh
---- 注: 当用户请求时被重写为。当需要调试时请用rewritelog和 rewriteloglevel 9联合,9为最大,即得到最多的调试信息;最小为1,表示得

到最少的调试信息;默认为0,表示没有调试信息。
---- sitemap的语法是${sitemap: LookupKey | Defaultvalue},有些书上把$写成了%是错误的。
0
0
分享到:
评论

相关推荐

    Apache 重写规则的常见应用

    ### Apache 重写规则的常见应用 #### 一、引言 在互联网世界中,网站维护与优化是一项持续性的工作,而URL重写是其中一项关键的技术手段。它不仅可以帮助我们美化URL,提升用户体验,还能在网站结构变化时避免链接...

    Apache重写规则的常见应用

    Apache 重写规则是Web服务器Apache中的一种功能,主要用于处理和转换用户请求的URL,以实现网站维护、服务器迁移、目录结构调整、URL变换等需求,确保用户体验的连续性。通过重写规则,可以避免因为网站变化导致的...

    Apache Rewrite Module 的重定向问题

    Apache的Rewrite Module(重写模块)是Apache服务器中一个非常强大的工具,主要用于URL重写及重定向功能。它通过一系列规则对请求进行处理,实现动态地改变请求路径,从而达到优化网站结构、改善用户体验的目的。 ...

    Apache的ReWrite的应用

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

    Apache的URL重写规则的标志详细说明

    以下是对Apache URL重写规则中一些常用标志的详细说明: 1. **R[=code]**: 强制外部重定向。此标志会在替代字符串前添加主机名和端口号,形成完整的外部URL,并使用指定的HTTP状态码进行重定向。默认情况下,状态码...

    13个实用的Apache Rewrite重写规则

    以下是对标题和描述中提到的13个实用的Apache Rewrite重写规则的详细解释: 1. **去除www前缀**:这个规则用于将URL中的 "www" 前缀去掉,统一域名格式。当HTTP_HOST不等于 `jb51.net` 时,规则将URL重定向至无 ...

    apache_rewrite语法

    apache_rewrite语法的详细解析,实现php的URL重写。

    ISAPI_Rewrite 3.0 URL重写规则

    在ISAPI_Rewrite中,`.htaccess`文件同样有效,它允许我们在不修改全局IIS配置的情况下,对单个目录或者子目录应用自定义的URL重写规则和策略。 总的来说,ISAPI_Rewrite 3.0 提供了一套强大的工具,使得IIS用户...

    urlrewrite重写URL伪静态请求路径.

    标题 "urlrewrite重写URL伪静态请求路径" 涉及到的是Web开发中的一个重要概念——URL重写,这是为了优化网站的SEO(搜索引擎优化)和用户体验而进行的一种技术手段。URL重写允许我们将复杂的动态URL转换为简洁、易于...

    Windows 2008 R2 + IIS 7.5 Rewrite组件重写规则兼容方法.docx

    在使用 Rewrite 组件时,一般都有对应的 httpd.ini 规则包,在 Apache 下,则对应有 .htaccess 规则包。但是,在 IIS 7.5 中,需要使用 URL Rewrite 模块来实现重写规则的导入。然而,导入的规则语法未必会 100% 让 ...

    Apache rewrite的重写相关的参数说明

    以下是对Apache rewrite重写参数及其用法的详细说明: 1. **R[=code]**: 强制外部重定向。当你设置这个标志时,Apache将生成一个新的外部HTTP请求,通常是301或302重定向。如果未指定`code`,默认为302(临时重定向...

    nginx rewrite重写规则与防盗链配置方法教程详解

    导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标记的几种形式,盗链时返回403错误,允许的域名直接跟在第二行的域名后面。 nginx rewrite重写规则与防盗链配置方法如下所示: nginx rewite...

    urlrewrite重写demo

    **URLRewrite重写技术详解** 在Web开发中,URL重写是一种常用的技术,它能够帮助我们优化网站的URL结构,提高用户体验,并且对于搜索引擎优化(SEO)也具有积极影响。`URLRewrite`是Apache的开源项目Tuckey提供的一...

    让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 中是否存在如下一段...

    ApacheHTTP服务器的URL重写规则与RewriteModule教程.docx

    ApacheHTTP服务器的URL重写规则与RewriteModule教程.docx

    urlrewrite url地址重写

    - **Apache mod_rewrite**:Apache服务器的模块,通过配置.htaccess文件实现URL重写。 - **UrlRewriteFilter**:这是一个基于Java的开源过滤器,常用于Spring MVC等Java Web应用中,通过web.xml配置实现URL重写。 ...

    CI Nginx IIS Apache URL重写

    总的来说,理解并掌握Nginx、IIS和Apache的URL重写规则对于优化网站的用户体验和SEO至关重要。在实际操作中,应根据服务器环境和具体需求调整重写规则,确保代码的灵活性和兼容性。同时,注意排除不需重写的目录,...

Global site tag (gtag.js) - Google Analytics