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