Apache Rewrite伪静态与URL跳转配置

 更新时间:2016年1月28日 00:50  点击:1921

Rewirte主要的功能就是实现URL的跳转,Rewirte代码的正则表达式是基于Perl语言.基于服务器级的(httpd.conf)和目 录级的 (.htaccess)两种方式,而我们Apache一般用的是目录级的 (.htaccess)方式,所以海天这里学习和记录的也就是(.htaccess)方式,俗称伪静态.

既然Rewirte主要的功能就是实现URL的跳转,所以海天就直接从URL跳转入手,废话不多说,开始!

一般的.htaccess伪静态跳转写法为(下例为输入 a.111cn.net 的域名时跳转到www.111cn.net):

 代码如下 复制代码


1 RewriteEngine on  

2 RewriteCond %{HTTP_HOST} ^a.111cn.net [NC]  

3 RewriteRule ^(.*) http://www.111cn.net/ [L]

 
Apache 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) 设置环境变量

以下直接举例说明:

例一、在一个虚拟主机里定义的Rewrite规则.功能是把client请求的URL地址前缀不是www.aaa.cn和 70.40.213.183都跳转到主机前缀为 http://www.aaa.cn.这样就避免相同内容的网页有多个指向的域名,如http://aaa.cn,而不利于SEO.

 代码如下 复制代码

1 RewriteEngine on
#打开rewirte功能  

2 RewriteCond %{HTTP_HOST} !^www.aaa.cn [NC]
#声明Client请求的URL地址中前缀不是www.kiya.cn,其中 [NC] 的意思是忽略大小写  

3 RewriteCond %{HTTP_HOST} !^70.40.213.183 [NC]
#声明Client请求的URL地址中前缀不是70.40.213.183  

4 RewriteCond %{HTTP_HOST} !^$
#声明Client请求的主机中前缀不为空  

5 RewriteRule ^(.*) http://www.aaa.cn/ [L]

#含义是如果Client请求的主机中的前缀符合上述条件,则直接进行跳转到http://aaacn/,[L]意味着立即停止重写操作,并 不再应用其他重写规则.这里的.*是指匹配所有URL中不包含换行字符,()括号的功能是把所有的字符做一个标记,以便于后面的应用.就是引用前面里的 (.*)字符.


例二、启用新域名为www.111cn.net之后.需要将原来的域名ss.aaa.cn, 以及论坛所在地址ss.aaa.cn/bbs/定向到新的域名,以便用户可以找到,并且使原来的论坛 URL 继续有效而不出现 404 未找到.比如原来的http://ss.aaa.cn/bbs/tread-60.html, 让它在新的域名下继续有效,点击后转发到http://bbs.111cn.net/tread-60.html;而其他网页,如原先的http: //ss.aaa.cn/purchase不会跳转到二级域名bbs.111cn.net/purchase上,而是到 www.111cn.net/purchase.

 代码如下 复制代码

1 RewriteEngine On  

2 RewriteCond %{REQUEST_URI} ^/bbs/  

3 RewriteRule ^bbs/(.*) http://bbs.aaa.cn/$1 [R=permanent,L]  

4 RewriteCond %{REQUEST_URI} !^/bbs/  

5 RewriteRule ^(.*) http://www.111cn.net/$1 [R=permanent,L]

 
例三、同时达到下面两个要求:
1.用http://www.111cn.net/xxx.php 来访问 http://www.111cn.net/xxx/
2.用http://yyy.www.111cn.net 来访问 http://www.111cn.net/user.php?username=yyy 的功能

 

 代码如下 复制代码

view sourceprint?
1 RewriteEngine On  

2 RewriteCond %{HTTP_HOST} ^www.111cn.net  

3 RewriteCond %{REQUEST_URI} !^user.php$  

4 RewriteCond %{REQUEST_URI} .php$  

5 RewriteRule (.*).php$ http://www.111cn.net/$1/ [R]  

6 RewriteCond %{HTTP_HOST} !^www.111cn.net  

7 RewriteRule ^(.+) %{HTTP_HOST} [C]  

8 RewriteRule ^([^.]+).www.111cn.net http://www.111cn.net/user.php?username=$1


例四、将URL地址 /type.php?typeid=* 跳转至 /type*.html,URL地址 /type.php?typeid=*&page=* 跳转至 /type*page*.html

 代码如下 复制代码

1 RewriteRule ^/type([0-9]+).html$ /type.php?typeid=$1 [PT]  

2 RewriteRule ^/type([0-9]+)page([0-9]+).html$ /type.php?typeid=$1&page=$2 [PT]

相信通过以上四个简单的例子,我们已经能够写出简单的Apache Rewrite的URL跳转


介绍了apache基础的rewrit知识,再发些例子给大家看看吧.
 

 代码如下 复制代码

RewriteEngine on
# 把 yourdomain.com 改为你要绑定的域名.
RewriteCond %{HTTP_HOST} ^(www.)?mq35.com$

# 把 subfolder 改为要绑定的目录.
RewriteCond %{REQUEST_URI} !^/bbs/

# 不要改以下两行.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# 把 subfolder 改为要绑定的目录.
RewriteRule ^(.*)$ /bbs/$1

# 把 yourdomain.com 改为你要绑定的域名
# 把 subfolder 改为要绑定的目录.
# subfolder/ 后面是首页文件index.php, index.html......

RewriteCond %{HTTP_HOST} ^(www.)?mq35.com$
RewriteRule ^(/)?$ bbs/index.php [L]

上面的整套语句是绑定一个子目录,如需绑定多个子目录,你可以重复添加以上的全套语句

[!--infotagslink--]

相关文章

  • 从PHP $_SERVER相关参数判断是否支持Rewrite模块

    如果是http://www.jb51.net/p1141.html形式的URL,可通过$_SERVER['REQUEST_URI']和$_SERVER['QUERY_STRING']值的区别来分析,最主要是如果页面是通过重定向会产生$_SERVER['REDIRECT_QUERY_STRING']和$_SERVER['REDIREC...2013-10-04
  • Apache启动报错No space left on device: AH00023该怎么解决

    Apache启动报错No space left on device: AH00023错误可能是进程导致了,虽然小编不知道什么原因但网上提供的解决办法确实是可以解决我们的问题,下面来看看。对于这类错误是因为linux系统的ipc信号量造成的,apache启动时...2015-10-21
  • apache配置黑名单和白名单及账户权限控制

    本文我们将分享apache配置黑名单和白名单,apache层的账户权限控制,以及apache黑名单白名单过滤功能,apache rewrite规则实现白名单。 apache配置黑名单和白名单的两...2016-09-14
  • apache开启gzip详解教程

    今天在用百度工具检测时发,发现有个提示如下 原来可以开启gzip啊,因为我的是apache所以和iis不同,经过网站搜索开启方法如下 一,找到你的httpd.conf文件,打开找到如下 ...2016-01-28
  • 解决PHPstudy Apache无法启动的问题【亲测有效】

    这篇文章主要介绍了PHPstudy Apache无法启动的问题及解决方法【亲测有效】,本文给大家总结了三种方法供大家参考,需要的朋友可以参考下...2020-10-30
  • apache http server遇到了一个问题,需要关闭

    重装系统后,重新安装了xamp,最近启动的时候经常报apache http server遇到了一个问题,需要关闭,显示如图: 解决方法:查看szModName报错的模块,然后把PHP安装目录下对应的模块...2016-01-28
  • Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程详解

    Windows Server 2016 上配置 APACHE+SSL+PHP+perl怎么配置?小编推荐了一篇介绍Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程,有需要的同学快来看看吧! ...2017-07-06
  • nginx+apache+mysql+php+memcached+squid搭建集群web环境

    当前,LAMP开发模式是WEB开发的首选,如何搭建一个高效、可靠、稳定的WEB服务器一直是个热门主题,本文就是这个主题的一次尝试。...2016-01-27
  • 西部数码空间伪静态配置方法图解

    今天在使用西部数码空间时发现里面有很多定义好的伪静态规则了,下面我来给大家介绍一下在后面主机面板中配置使用伪静态功能吧,希望文章对各位会带来帮助。...2016-10-10
  • 隐藏Nginx或Apache以及PHP的版本号的方法

    这篇文章主要介绍了隐藏Nginx或Apache以及PHP的版本号的方法,主要用来防止针对性的漏洞攻击,需要的朋友可以参考下...2016-01-05
  • apache下设置缓存方法详细介绍

    默认情况下,apache安装完以后,是不允许被cache的。如果外接了cache或squid服务器要求进行web加速的话,就需要在htttpd.conf里进行设置,当然前提是在安装apache的时候要激活mod_c...2016-01-28
  • apache中Order Allow Deny详解

    Order A, B (其中,A和B均可以代表allow或者deny,以下conlist表示控制列表) A from conlist1 B from conlist2 那么最终访问控制的结果为:(以(A)表示A的控制范围,) (A)= (conli...2016-01-28
  • Apache Reference Manual (10)

    Satisfy directive Syntax: Satisfy 'any' or 'all' Default: Satisfy all Context: directory, .htaccess Status: core Compatibility: Satisfy is only available...2016-11-25
  • Apache在httpd.conf配置文件中设置伪静态(Rewrite)

    .htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可 以允许用户通过.htaccess文件自...2016-01-28
  • Win7/Windows2003下IIS6.0、IIS7.5的伪静态组件安装和伪静态配置方法

    Win7Windows2003下IIS6.0、IIS7.5的伪静态组件安装和伪静态配置方法,还包括常用的伪静态规则使用方法...2016-01-27
  • 简单介绍apache的rewirte配置教程

    任何二级域名,均跳转到www下。 本地测试站点:www.111cn.net,下面是apache里的配置: 代码如下 复制代码 <VirtualHost *> <Directory "D:/webroot/myp...2016-01-28
  • 以动态模块的方式安装apache2.0.44+PHP4.3.0

    经过一天的努力,终于装完了apache2.0.44+PHP4.3.0呵呵, 不禁佩服自己的愚蠢 :( 以前安装都是用php静态模块的方式,似乎在apache2以上的版本上行不通(猜测而已:)) 安装过程简...2016-11-25
  • Mysql+Apache2+php5 安装

    下载下列文件至/usr/local/src/ apache(Unix平台最流行的WEB服务器平台)2.tar.gz MySQL(和PHP搭配之最佳组合)-5.0.22.tar.gz php(做为现在的主流开发语言)-5.1.2...2016-11-25
  • Apache Reference Manual (2)

    AuthName directive Syntax: AuthName auth-domain Context: directory, .htaccess Override: AuthConfig Status: core This directive sets the name of the author...2016-11-25
  • IIS&Apache 攻击记录分析篇

    每个网管最黑暗的时候莫过于服务器被攻击后的束手无策,其实服务器遭受攻击后,服务器的记录文件详细地记录了黑客活动的蛛丝马迹。...2016-01-27