Я хожу по 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
}
?>
Существуют ли другие более эффективные механизмы пешеходного перехода?