Как я понимаю content-type
и new-content-type
являются постоянными значениями, и это ЕДИНСТВЕННАЯ разница между старым и новым URL.
Если это так - есть несколько способов сделать это:
1. Использование mod_rewrite (вы просили об этом - поместите эти строки в .htaccess в корневой папке веб-сайта. Если их поместить в другом месте, потребуется некоторая настройка):
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^content-type/([^/]+)/(\d+)/([^/]+\.html)$ http://www.mysite.com/new-content-type/$1/$2/$3 [R=301,L]
Ну что ж - поскольку URL-адреса очень похожи (на основе предоставленных вами примеров и описания) - вы можете пойти еще более простым путем ( ПРИМЕЧАНИЕ: это перенаправит ЛЮБЫЕ URL-адреса в /content-type/
Папка. Если ваша цель состоит в том, чтобы перенаправлять только URL-адреса с окончанием .html, соответствующие этой структуре, не используйте ее):
RewriteRule ^content-type/(.+)$ http://www.mysite.com/new-content-type/$1 [R=301,L]
2. Не используется mod_rewrite - структура URL старых и новых URL очень похожа .. поэтому даже это будет работать (см. ПРИМЕЧАНИЕ выше):
Redirect 301 /content-type/ http://www.mysite.com/new-content-type/
Это перенаправит (301 постоянное перенаправление) все запросы на URL, начинающийся с /content-type/
, точно таким же, но с /new-content-type/
вместо.
ОБНОВЛЕНИЕ: более реальные URL предоставлены OP
Поскольку ваши РЕАЛЬНЫЕ URL-адреса сильно отличаются от старых, не существует действительно хорошего способа написать правило перезаписи одной строки для этого. Поэтому я вижу 2 основных варианта:
1. Создать правило перенаправления для КАЖДОГО старого URL (поместите его где-нибудь в верхней части .htaccess, желательно в конфигурации сервера, если это возможно):
Redirect 301 /forsale/light-trucks/12345/2010-dodge-ram-1500.html http://www.mysite.com/cars-trucks-for-sale/light-trucks/2010/dodge/ram-1500/12345/2010-dodge-ram-1500.html
Если у вас есть тонны таких старых URL-адресов .., тогда этот подход не очень хорош - слишком много URL-адресов для тестирования по каждому отдельному запросу + стоимость обслуживания (создайте эти правила перенаправления).
2. Продолжайте использовать существующие правила перенаправления, которые у вас есть (те, что переписывают на showcontent.php?id=12345
). В этом файле showcontent.php создайте правильный URL-адрес (как и должно быть на веб-сайте) и сравните его с запрашиваемым URL-адресом (возьмите его из $_SERVER['REQUEST_URI']
). Если URL-адреса отличаются, введите 301 redirect для правильного URL-адреса (используя функцию header()
). - Так работает ЭТОТ веб-сайт, например . Это может быть немного медленнее, чем .htaccess (поскольку PHP должен сработать) ... но НАМНОГО проще в реализации и обслуживании (практически нулевая стоимость обслуживания).