Сообщения пешеходного перехода после преобразования форума - PullRequest
0 голосов
/ 21 марта 2019

Я хожу по 1200 URL, используя mod_rewrite и скрипт php.

В: Есть ли способ сделать то же самое без сценария php?

Я перенес форум из YaBB (Perl) в SMF (php).Миграция привела к изменению URL-адресов, с которыми приходят внешние ссылки.У меня есть 1200 номеров, которые пересекаются.Пример 5 из них для обсуждения

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

Перевод [301], который я хочу сделать mod_rewrite, выглядит следующим образом

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

Я не был уверен, как илиесли возможно, чтобы mod_rewrite использовал таблицу перекрестного обхода напрямую.В настоящее время я использую два шага: переписать для запуска скрипта.

.htaccess находится в каталоге "forum"

 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 голосов
/ 21 марта 2019

На наших серверах мы создаем 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] 
...