Назад | Перейти на главную страницу

Apache2 и rewritemap - часы попыток

Я застрял с проблемой перезаписи карты.

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

RewriteCond %{HTTP_HOST}%{REQUEST_URI}\?%{QUERY_STRING} (^example\.com.abcd.cat_4)(.*)
RewriteRule .* ${url_rewrite_map:$1|NOTFOUND}? [R=301,L]

Я бы хотел, чтобы карта выглядела так:

example.com/abcd/cat_4 http://example.com/345_exact_address_of_page

Старые адреса выглядят так:

http://example.com/abcd/cat_4=0?Xi4B7WoN;;54

и я хочу их переписать в:

http://example.com/345_exact_address_of_page

Я много чего перепробовал, но у меня ничего не получилось ... Вы можете мне с этим помочь?

Хорошо, у меня все заработало. Для всех остальных вот решение.

RewriteCond %{HTTP_HOST}%{REQUEST_URI}\?%{QUERY_STRING} (^example\.com.abcd.abcd=.*)
RewriteRule .* ${url_rewrite_map:%1|$1}? [R=301,L]

Чтобы ответить на ответ Криста ван Бесиена: я считаю, что вы не можете использовать% 1% 2% 3 как одну строку до, две строки до и т. Д.% N относится только к последней строке RewriteCond, поэтому мне пришлось поместить все в одну строку и затем проверьте карту. Но все равно спасибо, ты подтолкнул меня в правильном направлении :)

Вы используете $ 1 в качестве ключа поиска на своей карте, но этот параметр просто содержит то, что вы записываете в RewriteRule. Строки, которые вы записываете в свой RewriteCond, записываются в% 1,% 2 и т. Д.

Итак, вы должны использовать что-то вроде:

RewriteCond %{HTTP_HOST}   (^example\.com)
RewriteCond %{REQUEST_URI} (/abcd/cat_4)
RewriteRule .* ${url_rewrite_map:%1%2|NOTFOUND} [R=301,L]