Перенаправление 400 URL с помощью Apache

Мне нужно перенаправить около 400 URL-адресов. Какой лучший способ пойти по этому поводу? Наиболее очевидным решением было бы добавить 400 строк "Redirect 301 old-url new-url" в.htaccess. Есть ли способ лучше?

Примеры URL:

50 из них:

/category -> /new-category-name-c/

около 350 из них:

/category/subcategory/product.html -> /slightly-different-product-name.html

Редактировать: добавленный пример

1 ответ

Решение

Вы можете создать PHP(или любой другой) скрипт, который будет обрабатывать все страницы, которые не существуют. Он обнаружит старые URL-адреса и вернет 301 перенаправление на новый URL-адрес.

Если старые URL-адреса не могут быть проанализированы с помощью регулярного выражения, вам необходимо создать карту, например:

$urlMap = array(
    '/category1' => '/new-category1',
    '/category2' => '/new-category2'
);

и искать новые URL из него. Если URL отсутствует в карте, верните заголовок 404 или перенаправьте куда-нибудь еще..

Вы можете использовать ErrorDocument директива для определения пользовательской страницы 404:

ErrorDocument 404 /process-urls.php

Вы можете получить путь от $_SERVER['REQUEST_URI'],

Обновить

Как предполагает @faa, вы можете использовать RewriteMap директива apache. Вам нужно создать текстовый файл, который будет отображать старые URL-адреса на новые, по одному сопоставлению на строку, разделенных пробелами:

/category1 /new-category-1
/category2 /new-category-2

Затем в файле виртуального хоста объявите карту:

RewriteMap examplemap txt:/path/to/file/map.txt

И правило перезаписи (может быть помещено в .htaccess):

RewriteCond ${examplemap:%{REQUEST_URI}|0} !=0
RewriteRule ^(.*) ${examplemap:$1|/not_found.html}

Этот метод проще поддерживать, чем помещать 400 правил перезаписи в .htaccess.

Другие вопросы по тегам