论坛转换后的人行横道消息

时间:2019-03-21 11:32:02

标签: php apache mod-rewrite

我正在使用mod_rewrite和一个php脚本横穿1200个网址。

问:没有php脚本,有没有办法做同样的事情?

我将论坛从YaBB(Perl)迁移到SMF(php)。迁移导致外部链接进入的网址发生了变化。我有1200个交叉的数字。为了讨论,其中的5个示例

old_id      new_id
1135287707   1
1135313823   2
1135313961   3
1135314073   4
1135314194   5

我要mod_rewrite做的[301]翻译如下

old: www.host.com/widgets/forum/YaBB.pl?num=<old_id>
new: www.host.com/widgets/forum/?topic=<new_id>

我不确定mod_rewrite如何或是否可能直接使用交叉表。目前,我正在使用两个步骤,一个重写以运行脚本。

.htaccess位于“论坛”目录中

 Options +FollowSymLinks
 RewriteEngine on
 RewriteCond "%{QUERY_STRING}" "num="
 RewriteRule "YaBB\.pl"       "redirect.php"

重写效果是

from: www.host.com/widgets/forum/YaBB.pl?num=<old_id>
  to: www.host.com/widgets/forum/redirect.php?num=<old_id>

运行重定向脚本。该脚本将人行横道数据存储在一个数组中,如下所示:

  <?php

  if (!array_key_exists('num', $_GET)) {
          header('Location: https://www.host.com/widgets/forum');  // no number, goto main page
          return;
  }

  // got a number, check it for cross-walk

  $crosswalk = [
        1135287707 => 1,
        1135313823 => 2,
        1135313961 => 3,
        1135314073 => 4,
        1135314194 => 5,
        ... 1200 more ...
  ];

  $num = $_GET['num'];

  if (array_key_exists($num, $crosswalk)) {
        $new_id = crosswalk[$num];
        header("Location: https://www.host.com/widgets/forum/?topic=$new_id", 301);  // redirect to new url
  }
  else {
        header('Location: https://www.host.com/widgets/forum'); // no crosswalk, goto main page
  }

  ?>

还有其他更有效的人行横道机制吗?

1 个答案:

答案 0 :(得分:0)

我们在服务器上执行的操作是创建RewriteRules并将其放入.htaccess中,它可能不是最干净的解决方案,但是它全部由apache处理。您可能想要创建简单的脚本来生成规则,然后将其放入网站根目录的.htaccess中。

列表将类似于

RewriteRule ^widgets/forum/YaBB\.pl\?num=1135287707$ http://www.host.com/widgets/forum/?topic=1 [R=301,L]
RewriteRule ^widgets/forum/YaBB\.pl\?num=1135313823$ http://www.host.com/widgets/forum/?topic=2 [R=301,L]
RewriteRule ^widgets/forum/YaBB\.pl\?num=1135313961$ http://www.host.com/widgets/forum/?topic=3 [R=301,L]
RewriteRule ^widgets/forum/YaBB\.pl\?num=1135314073$ http://www.host.com/widgets/forum/?topic=4 [R=301,L]
RewriteRule ^widgets/forum/YaBB\.pl\?num=1135314194$ http://www.host.com/widgets/forum/?topic=5 [R=301,L]

如果没有匹配项,您还希望以重定向结束

RewriteRule ^widgets/forum/YaBB\.pl\?num= http://www.host.com/widgets/forum [R=301,L]