1

我已经更改了我的地址并使它们成为 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]

谢谢你

4

1 回答 1

1

那是那个家伙的名字,它来自数据库,我用get exc调用它,当用户注册时,它会自动创建,我只是写它作为示例

我的意思是,在你拥有的只是1(id)之前。从那个id,你怎么得到蛞蝓?如果您可以从数据库中获取它,那么您需要保留这两个规则(进行一些小的更改):

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 值。

这样当有人请求时http://mywebsite.com/profile/1,重写规则会将其发送到profile.php,就像之前可以制作规范 URL 并进行重定向一样。

于 2012-10-22T02:18:58.667 回答