Перенаправление 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.