Попробуйте это правило:
RewriteRule ^([^+]*)\+(.*) $1\ $2 [N]
Я не совсем уверен, что mod_rewrite решит эту проблему за вас, поскольку +
- совершенно допустимый символ строки запроса. Если у вас установлен Wordpress в корне вашего веб-сайта, он может обрабатывать эту часть URL-адреса (PathInfo) как параметр строки запроса.
Что ж, у меня есть решение, но оно мне не очень нравится ... Это заменит все подчеркивания дефисами, а перенаправления - кодом состояния 301, что означает «Переехал навсегда». (конечно, вы также можете использовать его для замены любых других символов)
Кроме того, это должно быть первое правило (например, в файле .htaccess), потому что первая строка на самом деле представляет собой цикл, который снова проходит через все правила (из-за флага N)
RewriteRule ^ / redirect / from /([^_ provided*)\_(.*)$ / redirect / from / thisisthethingwedontneed $ 1- $ 2 [N, L]
RewriteCond% {REQUEST_URI} (thisisthethingwedontneed) +
RewriteRule (thisisthethingwedontneed) + (. *) / Url / to / redirect / to / $ 2 [NC, QSA, R = 301]
Пояснение:
'redirect / form': базовый путь или все, что вы хотите перенаправить. Он должен быть включен во вторую часть, чтобы иметь возможность сопоставить его при следующем запуске цикла
первая часть: «заменить (не подчеркивание), за которым следует подчеркивание, за которым следует (что угодно)», захват первого и последнего часть для последующего использования
вторая часть: вставьте текст, который, вероятно, не найден в ваших URL-адресах, перед захваченной первой частью, затем добавьте первую часть, затем тире, а затем флаги второй части
: N: после этого, продолжайте снова, снова выполните все правила перезаписи, но с измененным URL-адресом L: если было совпадение, остановитесь здесь (2 флага вместе фактически делают то, что вы ожидаете от первого.)
Условие для следующего правила: выполнить следующее правило, только если ранее определенная строка может быть найдена в URI запроса, по крайней мере, один раз
Первая часть: сопоставить и захватить любые вхождения смешной строки и захватить все после него
Вторая часть: добавьте вторую часть к любому пути, на который мы хотим перенаправить (и забудьте о забавной строке)
Флаги: NC: без учета регистра QSA: добавить любую строку запроса R = 301: перенаправление с перемещением навсегда
У меня есть лучший вариант - с PHP:
.htaccess:
RewriteCond %{REQUEST_URI} ^/word/[^/]+$
RewriteRule ^word/(.*)$ http://example.com/special_redirect.php?q=$1 [L,QSA,R=301]
./ special_redirect.php
<?php
$q = $_GET['q'];
$new = strtolower(convert_character($q));
//echo "$q | $new";
$location = "http://" . $new . ".example.com/";
//echo $location;
function convert_character($name) {
$patterns_raw = array('Ä', 'ä', 'Ö', 'ö', 'Ü', 'ü', 'ß');
foreach ($patterns_raw as $pattern_raw) {
$patterns[] = '/' . $pattern_raw . '/u';
}
$replacements = array('ae', 'ae', 'oe', 'oe', 'ue', 'ue', 'ss');
$new_name = preg_replace($patterns, $replacements, $name);
return $new_name;
}
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: $location" );
?>
Это выше справляется с немецкими символами умляута, но его можно адаптировать для более простых случаи от "_" до "-" и так далее ...