返回列表

[其他] 301重定向的实现方法

设置.htaccess文件

使访问example.com的时候就会自动转到www.example.com
在.htaccess文件里写上以下代码即可。

  1. RewriteEngine On
  2. RewriteCond %{http_host} ^mydomain.com [NC]
  3. RewriteRule ^(.*)$ http://www.mydomain.com/$1 [L,R=301]
复制代码


如果是多条301重定向就需要写多行,例如想让verydz.com和www.verydz.net 都跳转到www.verydz.com,可以这样写:
  1. RewriteEngine On
  2. RewriteCond %{http_host} ^verydz.com [NC]
  3. RewriteRule ^(.*)$ http://www.verydz.com/$1 [L,R=301]
  4. RewriteCond %{http_host} ^www.verydz.net[NC]
  5. RewriteRule ^(.*)$ http://www.verydz.com/$1 [L,R=301]
复制代码
简化写法:
  1. RewriteEngine On
  2. RewriteCond %{http_host} !^www.verydz.com [NC]
  3. RewriteRule ^(.*)$ http://www.verydz.com/$1 [L,R=301]
复制代码



注意:URL标准化的301重定向(以上代码)需要写在其他URL-rewrite代码之前。
RewriteEngine on只能出现一次,如果已经有了就不用重复写了,这个要写在第一行。


例如:已经有了Discuz!伪静态代码,还需要加301重定向代码写法如下:

  1. # 将 RewriteEngine 模式打开
  2. RewriteEngine On
  3. RewriteCond %{http_host} ^mydomain.com [NC]
  4. RewriteRule ^(.*)$ http://www.mydomain.com/$1 [L,R=301]
  5. # 修改以下语句中的 /discuz 为您的论坛目录地址,如果程序放在根目录中,请将 /discuz 修改为 /
  6. RewriteBase /
  7. # Rewrite 系统规则请勿修改
  8. RewriteCond %{QUERY_STRING} ^(.*)$
  9. RewriteRule ^topic-(.+)\.html$ portal.php?mod=topic&topic=$1&%1
  10. RewriteCond %{QUERY_STRING} ^(.*)$
  11. RewriteRule ^article-([0-9]+)-([0-9]+)\.html$ portal.php?mod=view&aid=$1&page=$2&%1
  12. RewriteCond %{QUERY_STRING} ^(.*)$
  13. RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2&%1
  14. RewriteCond %{QUERY_STRING} ^(.*)$
  15. RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2&%1
  16. RewriteCond %{QUERY_STRING} ^(.*)$
  17. RewriteRule ^group-([0-9]+)-([0-9]+)\.html$ forum.php?mod=group&fid=$1&page=$2&%1
  18. RewriteCond %{QUERY_STRING} ^(.*)$
  19. RewriteRule ^space-(username|uid)-(.+)\.html$ home.php?mod=space&$1=$2&%1
  20. RewriteCond %{QUERY_STRING} ^(.*)$
  21. RewriteRule ^blog-([0-9]+)-([0-9]+)\.html$ home.php?mod=space&uid=$1&do=blog&id=$2&%1
  22. RewriteCond %{QUERY_STRING} ^(.*)$
  23. RewriteRule ^archiver/(fid|tid)-([0-9]+)\.html$ archiver/index.php?action=$1&value=$2&%1
  24. RewriteCond %{QUERY_STRING} ^(.*)$
  25. RewriteRule ^([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+)\.html$ plugin.php?id=$1:$2&%1
复制代码

为什么要使用301重定向

301重定向可促进搜索引擎优化效果

  从搜索引擎优化角度出发,301重定向是网址重定向最为可行的一种办法。当网站的域名发生变更后,搜索引擎只对新网址进行索引,同时又会把旧地址下原有的外部链接如数转移到新地址下,从而不会让网站的排名因为网址变更而收到丝毫影响。同样,在使用301永久性重定向命令让多个域名指向网站主域时,亦不会对网站的排名产生任何负面影响。

经常会碰到这样的情况,其他网站链接你的站点时,会用下面的链接:

www.example.com
example.com/
www.example.om/index.html
example.com/index.php

而这样导致:你站点主域名的pr值分散到其他几个URLs了。

如果你用301重定向把其他三个URL转到
www.example.com
PR也就集中在主域名:www.example.com 了。

TOP

首页是静态页的话想实现二级域名访问论坛的方法

  1. RewriteEngine on
  2. RewriteCond %{HTTP_HOST} ^(bbs.)?verydz.com$
  3. RewriteCond %{REQUEST_URI} !^/forum.php
  4. RewriteCond %{REQUEST_FILENAME} !-f
  5. RewriteCond %{REQUEST_FILENAME} !-d
  6. RewriteRule ^(.*)$ /forum.php$1
  7. RewriteCond %{HTTP_HOST} ^(bbs.)?verydz.com$
  8. RewriteRule ^(/)?$ forum.php [L]
复制代码

TOP

301重定向:Discuz安装不同系统的子目录

状况描述:301转向就不再多解释了,一般的linux系统平台上的网站在设置301转向的时候都是在根目录下添加.htaccess文件,文件里写相应的语句就可以了。但是我们可能会在这个网站的子目录安装不同的系统,比如在网站的forum文件夹目录下安装了discuz论坛,而你默认又启用了discuz的伪静态设置的话,则更根目录的301转向设置对这个forum目录是不起作用的。

现象描述:访问verydz.com可以自动301跳转到www.verydz.com;但是访问verydz.com/forum不会自动301跳转到www.verydz.com/forum

原因分析: 301转向是通过.htaccess这是rewrite语句来实现的,而forum文件夹下的discuz论坛也启用了.htaccess 的rewrite语句来设置伪静态,在两者冲突的情况下,以当前目录为准。于是,根目录的301转向不在forum目录有效了。

解决方法:修改forum目录的.htaccess文件,再多添加一条对应的301 rewrite语句。

具体要实现三个目标:
1.先把http://verydz.com重定向到http://www.verydz.com
2.再把http://verydz.com/forum重定向到http://www.verydz.com/forum
3.同时要对DZ论坛的伪静态也起作用,使得http://verydz.com/forum/thread-155-1-1.html这样的地址也能成功重定向到http://www.verydz.com/forum/thread-155-1-1.html

根目录设置301转向的代码可以写成如下:

  1. RewriteEngine On
  2. RewriteCond %{HTTP_HOST} ^verydz.com$
  3. RewriteRule ^(.*)$ http://www.verydz.com/$1 [R=301,L]
复制代码

但forum文件夹下的.htaccess文件就有变化了:

  1. # 将 RewriteEngine 模式打开
  2. RewriteEngine On
  3. # 修改以下语句中的 /discuz 为你的论坛目录地址,如果程序放在根目录中,请将 /discuz 修改为 /
  4. RewriteBase /forum
  5. # Rewrite 系统规则请勿修改
  6. RewriteCond %{HTTP_HOST} ^verydz\.com
  7. RewriteRule ^(.*)$ http://www.verydz.com/forum/$1 [R=301,L]
复制代码


然后这个下面跟着的就是DZ论坛原有的伪静态规则了

TOP

返回列表