Drupal: динамическая масса 301 перенаправления - PullRequest
2 голосов
/ 21 декабря 2011

У нас есть около ста тысяч путей, нам нужно 301 перенаправить на новую структуру.Что-то вроде:

 lang.site.com/section/subsection/article
                  -> 
 lang.site.com/newsection/newsubsection/article

Раньше при миграции с domain.com на newdomain.com мы просто помещали файл .htaccess с 10k + сгенерированными сценариями строками, соответствующими старым путям новым путям, и это работалоХорошо.Это не повлияло на производительность нового домена, поскольку Apache прочитал .htaccess только тогда, когда пользователь попытается получить доступ к старому домену.

Теперь это не будет работать, поскольку имя домена неменяется только структура путей.Количество изменяющихся путей приближается к отметке 100 000, поэтому очевидно, что понятие Apache, считывающее 100 000 строк .htaccess для каждой загрузки страницы, просто абсурдно.

Я хотел бы получить некоторые идеи о том, как реализоватьэто правильно, с низкой производительностью.Я не прошу вас, ребята, за готовое решение, просто помогите в мозговом штурме, что было бы наиболее приемлемым решением в нашем случае использования.

У нас также будет сервер Varnish перед Apache, обслуживающий кэшированный контент, но я полагаю, что следующее решение все еще будет работать, поскольку запросы, которые Varnish не может удовлетворить, перенаправляются на Apache в нашей среде LAMP..

Что я имел в виду:

  • В Drupal 7 есть файл html.tpl.php, в котором есть <header> часть страницы
  • Во время выполнения html.tpl.php, мы бы проверили базу данных MySQL, чтобы увидеть, существует ли путь, запрошенный пользователем, в новой таблице pathalias
    • Если путь не найден и найдено отношение old path <-> new path:
      • PHP header('Location:'); К 301 перенаправить пользователя в правильное новое местоположение
    • Иное:
      • Позволить Drupal обработать запрос как обычно и продолжить выполнение

Нам также сказали обновить перенаправления старого домена, чтобы напрямую перенести пользователя на новый сайт без каких-либо цепочек 301.Я предполагаю, что мы могли бы просто использовать ту же проверку БД, чтобы увидеть, существует ли связь между самым старым путем и самым новым путем по старому пути.К счастью, мы сохранили все эти даже более старые отношения на всякий случай, и теперь они могут быть полезны.

Если вы прочитаете, любые идеи, как решить это наилучшим образом, будут с благодарностью:)

1 Ответ

0 голосов
/ 22 декабря 2011

Это то, что я бы попробовал

1) Простой метод.

Попробуйте модуль http://drupal.org/project/pathauto

Вы можете определить шаблон для вашего модуля.

lang.site.com/newsection/newsubsection/article

lang.site.com/[node:newsection]/[term:newsubsection]

// This is an example not the actual pattern u will use. If you can't seem to get this then 
revert back.

Путь будет создан только во время задания cron.так что на вашу производительность это не повлияет.

2) Вышеописанный метод должен быть достаточно хорошим, если нет.Вы можете написать модуль и реализовать приведенную ниже логику

A - hook_cron () // При каждом запуске cron должен запускаться следующий код B - Загрузить узел с помощью node_load () C - Проверить URI узла в свойшаблон D- Если он не совпадает, измените его.E - сохранить узел, используя node_save ()

Cheers, vishal

...