Поиск и замена в апачском htaccess RewriteRule

[j for i in zip(a,b) for j in i]
7
задан Paul Irish 28 May 2009 в 05:57
поделиться

4 ответа

Попробуйте это правило:

RewriteRule ^([^+]*)\+(.*) $1\ $2 [N]
8
ответ дан 7 December 2019 в 03:20
поделиться

Я не совсем уверен, что mod_rewrite решит эту проблему за вас, поскольку + - совершенно допустимый символ строки запроса. Если у вас установлен Wordpress в корне вашего веб-сайта, он может обрабатывать эту часть URL-адреса (PathInfo) как параметр строки запроса.

0
ответ дан 7 December 2019 в 03:20
поделиться

Что ж, у меня есть решение, но оно мне не очень нравится ... Это заменит все подчеркивания дефисами, а перенаправления - кодом состояния 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: перенаправление с перемещением навсегда

1
ответ дан 7 December 2019 в 03:20
поделиться

У меня есть лучший вариант - с 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" );

?>

Это выше справляется с немецкими символами умляута, но его можно адаптировать для более простых случаи от "_" до "-" и так далее ...

0
ответ дан 7 December 2019 в 03:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: