`
wsmajunfeng
  • 浏览: 496958 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Apache Rewrite 规则跳转常见配置

 
阅读更多

1、Rewrite规则简介: 
Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接 安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。 
基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。 
基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性且在.htaccess里要声明RewriteEngine on。

2、举例说明: 
例一.下面是在一个虚拟主机里定义的规则。功能是把client请求的主机前缀不是www.alibaba.cn和70.40.213.183都跳转到主机前缀为http://www.alibaba.com ,避免相同内容的网页有多个指向的域名,如http://alibaba.com

写道
NameVirtualHost 70.40.213.183:80
ServerAdmin duanxf@ alibaba.com
DocumentRoot "/web"
ServerName alibaba.com 
RewriteEngine on #打开rewirte功能
RewriteCond %{HTTP_HOST} \!^www.alibaba.com \[NC\] #声明Client请求的主机中前缀不是www.alibaba.com,其中 \[NC\] 的意思是忽略大小写
RewriteCond %{HTTP_HOST}\!^70.40.213.183 \[NC\] #声明Client请求的主机中前缀不是70.40.213.183,其中 \[NC\] 的意思是忽略大小写
RewriteCond %{HTTP_HOST} \!^$ #声明Client请求的主机中前缀不为空
RewriteRule \^(.*) http://www.alibaba.com/ [L] #含义是如果Client请求的主机中的前缀符合上述条件,则直接进行跳转到http://www.alibaba.com/,[L]意味着立即停止重写操作,并不再应用其他重写规则。这里的.\*是指匹配所有URL中不包含换行字符,()括号的功能是把所有的字符做一个标记,以便于后面的应用.就是引用前面里的(.*)字符。

 

3.Apache mod_rewrite规则重写的标志一览 
1) R[=code](force redirect) 强制外部重定向

强制在替代字符串加上http://thishost\[:thisport\]/前缀重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码。

2) F(force URL to be forbidden)禁用URL,返回403HTTP状态码。

3) G(force URL to be gone) 强制URL为GONE,返回410HTTP状态码。

4) P(force proxy) 强制使用代理转发。

5) L(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。

6) N(next round) 重新从第一条规则开始运行重写过程。

7) C(chained with next rule) 与下一条规则关联 
如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。 
8) T=MIME-type(force MIME type) 强制MIME类型

9) NS (used only if no internal sub-request) 只用于不是内部子请求

10) NC(no case) 不区分大小写

11) QSA(query string append) 追加请求字符串

12) NE(no URI escaping of output) 不在输出转义特殊字符

例如:RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE] 将能正确的将/foo/zoo转换成/bar?arg=P1=zoo

13) PT(pass through to next handler) 传递给下一个处理

例如:

RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理

Alias /def /ghi

14) S=num(skip next rule(s)) 跳过num条规则

15) E=VAR:VAL(set environment variable) 设置环境变量 
URL重定向 
例子一:

同时达到下面两个要求:

1.用http://www.alibaba.com/home.html 来访问 http://www.alibaba.com/home/

2.用http://powercctv.alibaba.com 来访问 http://www.aliaba.com/user.html?username=powercctv 的功能

写道
RewriteEngine On
RewriteCond %{HTTP_HOST}
^www.alibaba.com
RewriteCond %{REQUEST_URI} !^home.html$
RewriteCond %{REQUEST_URI}.html$
RewriteRule (.*).html$ [http://www.alibaba.com/$1/] [R]
RewriteCond %{HTTP_HOST} !^www.alibaba.com
RewriteRule ^(.+) %{HTTP_HOST}[C]
RewriteRule ^([^.]+).aliaba.com [http://www.alibaba.com/user.html?username=$1]

 

例子2:

冒号问题。

假如:我们的url有冒号,这就比较痛苦了。通常的url跳转整个匹配遇到冒号是会有问题的。因为我们的url含有冒号开头。这个时候就需要采用rewritecond进行匹配。

写道
RewriteCond %{QUERY_STRING} ^action=mcweb\:(.*)
RewriteRule \^/mcweb/contact.htm(.*)$ ${message_alibaba_com}/msgsend/contact.htm?action=%1 [L,R,NE]

 Apache的跳转如果不加任何说明他会把匹配到的字符串后面的参数全部加到新跳转的URL上面。比如上面,所有跳转到mcweb/contact.htm这个链接问号后面的参数和

RewriteCond %{QUERY_STRING} ^action=mcweb\:-( .*)

写道
RewriteCond %{QUERY_STRING} ^action=mcweb\:-( .*)

 进行匹配,如果发现雷同,则跳转到message.alibaba.com/msgsend/contact.htm?action= 的后面%1就是匹配到的之后相同的字符串。如果有多个则多来几个(.*) %n就可以了
Apache的rewrite跳转还有先后顺序,如果我想^/mcweb/contact.htm(.*)$包含mcweb在内的所有访问 contact.htm全部跳转到/msgsend/contact.htm  同时所有的action=mcweb: 这样的url也都跳转到

写道
message.alibaba.com/msgsend/contact.htm?action= 这个url,那么需要在这个配置后面加一行:
RewriteRule ^/mcweb/contact.htm ${message_alibaba_com}/msgsend/contact.htm [L,R,NE]

 如果我们匹配的时候只需要匹配冒号:那就比较简单了

写道
RewriteRule ^wiki/(.*:.*) wiki/index.php?title=$1 [L]
分享到:
评论

相关推荐

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

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

    Apache 重写规则的常见应用

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

    Apache Rewrite实现URL的301跳转和域名跳转

    Apache Rewrite模块是一个强大的URL重写工具,主要用于实现URL的跳转和重定向,它基于Perl兼容正则表达式(PCRE)语法。该模块可以在服务器配置级别(httpd.conf)和目录配置级别(.htaccess)进行使用。启用Rewrite...

    实例讲解nginx的rewrite规则

    ### 实例讲解Nginx的...通过上述实例和解释,我们可以看到Nginx中的`rewrite`规则是非常强大且灵活的,它不仅可以用于简单的URL重写,还可以根据不同的条件进行复杂的逻辑处理,从而实现更加高效和安全的服务配置。

    Apache之Rewrite和RewriteRule规则梳理以及http强转https的配置总结(完整版)

    本篇文章详细介绍了Apache之Rewrite和RewriteRule规则以及http强转https的配置总结,可作为平时运维手册.特此分享,希望能帮助到有用到的朋友!

    Apache mod_rewrite实现HTTP和HTTPS重定向跳转

    ### Apache mod_rewrite 实现 HTTP 和 HTTPS 重定向跳转 #### 概述 在网站安全性日益受到重视的今天,HTTPS 成为了大多数网站的标准配置。HTTPS 不仅提供了数据加密传输的功能,还增强了用户对网站的信任度。然而...

    Apache的Rewrite设置多域名301跳转到主域名的方法

    总之,Apache的Rewrite模块提供了强大的URL处理能力,通过合理的规则设置,可以实现多域名到主域名的301跳转,有效管理和优化网站的SEO策略。同时,注意处理好包含查询字符串的URL,确保重定向的准确性和搜索引擎...

    Apache服务的HTTPS支持配置

    为了让用户在访问HTTP页面时自动跳转到HTTPS,需要在Apache配置文件中设置重写规则。以下是一个简单的重写规则示例: ```apache RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ ...

    Apache伪静态Rewrite详解

    一、Rewrite规则简介:Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块...

    apache虚拟主机配置

    ### Apache虚拟主机配置详解 #### 一、Apache虚拟主机配置概览 Apache是目前最流行的Web服务器之一,它支持多种类型的虚拟主机配置。通过虚拟主机技术,可以在同一台物理服务器上运行多个不同的网站,这对于节省...

    windows中apache 301页面跳转实现方法

    在Windows环境中,Apache服务器的301页面跳转是一种常见的SEO优化策略,用于永久性地重定向一个URL到另一个URL。301重定向对于维护网站的统一性、转移权重以及处理URL规范化问题至关重要。以下是两种主要的实现方法...

    nginx rewrite 实现URL跳转的方法

    Rewrite模块是Nginx提供的一个强大功能,它可以在服务器内部将用户请求的URL按照指定规则进行重写和跳转,达到修改用户访问URL的目的。在配置Nginx时,掌握如何使用Rewrite规则对于实现复杂的URL重写和优化网站的SEO...

    Apache开启伪静态

    Apache 的 Rewrite 模块提供了强大的 URL 重写功能,通过在配置文件中添加规则,能够实现复杂的 URL 转换和跳转。本文将详细介绍 Apache 开启伪静态的配置和应用。 一、加载 Rewrite 模块 要使用 Rewrite 模块,...

    Nginx Rewrite规则与使用介绍和技巧实例

    1. `last` 标记相当于Apache中的 `[L]` 标记,表示完成当前规则后,继续处理后续的rewrite规则。 2. `break` 标记在当前规则完成后,停止执行后续的rewrite规则。 3. `redirect` 标记用于返回302临时重定向状态,...

    nginx负载均衡ssl证书认证强制跳转https+keeplived+apache

    在构建高可用性和安全性的网络服务时,"nginx负载均衡ssl证书认证强制跳转https+keeplived+apache"是一个常见的架构模式。该模式结合了Nginx的反向代理和负载均衡能力、Keepalived的高可用性保证以及SSL证书来确保...

    UrlReWrite(Url重写或伪静态)

    URL重写的核心是通过服务器端的规则配置,将用户请求的实际动态URL转换为看起来像是静态页面的URL。这种技术基于HTTP服务器的内部重定向机制,例如IIS的UrlRewrite模块或Apache的mod_rewrite模块。当用户访问一个...

Global site tag (gtag.js) - Google Analytics