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

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

Я застрял с проблемой 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

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

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

и я хочу, чтобы они переписали в:

http://example.com/345_точный_адрес_страницы

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

решение1

Вы используете $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]

решение2

Ладно, у меня получилось. Для всех остальных вот решение.

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, поэтому мне пришлось все поместить в одну строку, а затем проверить карту. Но в любом случае спасибо, вы подтолкнули меня в правильном направлении :)

Связанный контент