httpd配置文件中重写函数Rewrite

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了httpd配置文件中重写函数Rewrite相关的知识,希望对你有一定的参考价值。

【RewriteCond%{HTTP_HOST}^(www\.)?xxx\.com$】

这是重写条件,前面%{HTTP_HOST}表示当前访问的网址,只是指前缀部分,格式是www.xxx.com不包括“http://”和“/”,^表示字符串开始,$表示字符串结尾,\.表示转义的.,如果不转义也行,推荐转义,防止有些服务器不支持,?表示前面括号www\.出现0次或1次,这句规则的意思就是如果访问的网址是xxx.com或者www.xxx.com就执行以下的语句,不符合就跳过。

配置域名跳转

<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^www.domain1.com$
        RewriteRule ^/(.*)$
http://www.domain2.com/$1 [R=301,L]
    </IfModule>
如果是多个域名,可以这样设置:
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^www.domain.com [OR]
        RewriteCond %{HTTP_HOST} ^www.domain1.com$
        RewriteRule ^/(.*)$
http://www.domain2.com/$1 [R=301,L]
    </IfModule>
或者:    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} !^www.domain2.com$
        RewriteRule ^/(.*)$
http://www.domain2.com/$1 [R=301,L]
    </IfModule>

注意:^/(.*)$  其中 其中^表示正在表达式匹配,/ 是表示基目录,意思是从域名后开始匹配。而后面的$1==(.*)   $1用来表示前面基目录后面匹配的任意字符,有时不带上在重写的时候不带上这个/ 出错


前面%{HTTP_HOST}表示当前访问的网址,只是指前缀部分
%{REQUEST_URI}表示访问的相对地址,就是相对根目录的地址,就是域名/后面

example :

赛卡软件近期更换了域名,新域名为www.sicasoft.com, 更加简短好记。这时需要将原来的域名ss.kiya.cn, 以及论坛所在地址ss.kiya.cn/bbs/定向到新的域名,以便用户可以找到,并且使原来的论坛 URL 继续有效而不出现 404 未找到,比如原来的http://ss.kiya.cn/bbs/tread-60.html, 让它在新的域名下继续有效,点击后转发到http://bbs.sicasoft.com/tread-60.html,而其他网页,如原先的http://ss.kiya.cn/purchase不会到二级域名bbs.sicasoft.com/purchase上,而是到www.sicasoft.com/purchase
按照这样的要求重定向规则应该这样写:

    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/bbs/
    RewriteRule ^bbs/(.*)
http://bbs.sicasoft.com/$1 [R=permanent,L]
    RewriteCond %{REQUEST_URI} !^/bbs/
    RewriteRule ^(.*)
http://www.sicasoft.com/$1 [R=permanent,L]

以上是关于httpd配置文件中重写函数Rewrite的主要内容,如果未能解决你的问题,请参考以下文章

ThinkPHP框架实现rewrite路由配置

Apache httpd.conf配置文件AllowOverride参数详解

Apache配置之URL重写

thinkphp url重写

在 HTTPD.CONF 文件中使用 Mod_Rewrite

Apache Typecho框架启用地址重写