htaccess 301动态地将旧页面重定向到新页面

时间:2012-10-22 00:20:49

标签: .htaccess redirect http-status-code-301

我已经改变了我的地址并使它们变成了sef,但是我的一些链接很旧,其中一些是人们共享的,如果他们试图进入那里,他们会看到500个内部服务器错误,你可以想象,我需要将它们重定向到新的网址,我知道如何静态重定向,但不知道如何动态地

例如,我的旧链接是:mywebsite.com/profile/1,我的新链接是mywebsite.com/profile/1/johnny-walker

如果有人试图查看我的旧链接,我希望他们重定向到我的新链接

我的旧规则是:

RewriteRule ^profile/(.*)/?$ profile.php?id=$1 [L] 

我的新规则是:

RewriteRule ^profile/([0-9]*)/(.*)/?$  profile.php?id=$1&slug=$2 [QSA,L]

谢谢

1 个答案:

答案 0 :(得分:1)

  

那个名字的slu ,,它来自数据库,我用get exc来调用它,当用户注册时,它自动创建,我只是把它写成一个例子

我的意思是,在您拥有1之前(身份证)。从那个id,你怎么得到slug?如果你可以从数据库中获取它,那么你需要保留这两个规则(稍作修改):

RewriteRule ^profile/([0-9]+)/([^/]+)/? profile.php?id=$1&slug=$2 [QSA,L]
RewriteRule ^profile/([0-9]+)/? profile.php?id=$1 [L] 

然后在profile.php中,您需要执行以下操作:

  1. 在文件的开头,检查是否有$_GET['slug']值,如果是,则像正常一样将页面加载到页面
  2. 如果没有slug值,则需要获取$_GET['id'](已清理)值并从数据库中检索slug
  3. 使用header()功能,创建重定向:

    header('HTTP/1.1 301 Moved Permanently');
    header('Location: /profile/' . $id . '/' . $slug);
    exit();
    

    其中$id是id,$slug是数据库中的slug值。

  4. 如果有人请求http://mywebsite.com/profile/1,那么重写规则会将其发送到 profile.php ,就像之前可以制作规范网址并进行重定向一样