首页 > 开发 > Apache > 正文

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

2020-04-16 19:26:24
字体:
来源:转载
供稿:网友
如果要想用到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.Cuoxin.com和70.40.213.183都跳转到主机前缀为//www.Cuoxin.com,避免相同内容的网页有多个指向的域名,如http://Cuoxin.com。
复制代码 代码如下:

NameVirtualHost 70.40.213.183:80
ServerAdmin slj@Cuoxin.com
DocumentRoot “/web”
ServerName Cuoxin.com

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

例二.将输入 en.Cuoxin.com 的域名时跳转到www.Cuoxin.com
复制代码 代码如下:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^en.Cuoxin.com [NC]
RewriteRule ^(.*) //www.Cuoxin.com/ [L]

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

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/bbs/
RewriteRule ^bbs/(.*) http://bbs.Cuoxin.com/$1 [R=permanent,L]
RewriteCond %{REQUEST_URI} !^/bbs/
RewriteRule ^(.*) //www.Cuoxin.com/$1 [R=permanent,L]
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表