В переменной %{THE_REQUEST} содержится полная строка запроса "GET /index.php/company HTTP/1.1", а шаблон "^[A-Z]{3,9}\ (.*)/index\.php\ HTTP" совпадет только если в переменной найдётся такой фрагмент "/index.php HTTP".
Уберите строку с этим RewriteCond и редирект заработает.
Данный вопрос возник в связи с тем что в данном разделе встречается несколько раз centralnii-okrug.
И такой вопрос, насколько фигово для сайта/сервака наличии такой ереси в количестве 700+ строк? 😂😂😂
Да, "рарработчек" старался когда писал скрипт😂😡🤪
Вместо key2 нужен фрагмент общий для неправильных адресов.
Для /gde-kupit-saiding_keyword/ таким фрагментом был keyword.
Для /gde-kupit-saiding/centralnii-okrug/ таким фрагментом наверно будет centralnii-okrug или centralnii. Смотря как именно коверкает адрес тот глючный скрипт.
А вот количество адресов в списке изрядное. Несколько десятков адресов было бы норм, а вот несколько сотен в .htaccess лучше не запихивать.
Сначала в шаблоне идет искомый keyword причем без ^ (это маркер начала строки, он здесь не нужен).
Потом метасимвол точка и негативный просмотр назад (?<! ) с помощью этой конструции проверяем что вокруг keyword нету символов _ и /.
Зацикливания здесь не будет. Этот шаблон не совпадает с адресами где нет keyword, а также не совпадет с правильным адресом gde-kupit-saiding_keyword/ т.к. вокруг keyword есть символы _ и /.
Я специально и ссылку давал https://regex101.com/r/yY8rM8/1. Там можно наглядно посмотреть, какие адреса ловит эта регуляка.
Можно не писать отдельные RewriteRule для каждого слова, а задать списком соответствие слов и урл.
totamon, Попробовал
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ (.*)/index\.php\ HTTP/
RewriteRule ^index\.php/(.*)$ http://ваш_сайт/$1 [R=301,L]
Не помогло. Какие еще есть варианты?
Шаблон в RewriteRule верный.
Проблема в строке с RewriteCond.
В переменной %{THE_REQUEST} содержится полная строка запроса "GET /index.php/company HTTP/1.1", а шаблон "^[A-Z]{3,9}\ (.*)/index\.php\ HTTP" совпадет только если в переменной найдётся такой фрагмент "/index.php HTTP".
Уберите строку с этим RewriteCond и редирект заработает.
Вот еще другой вариант
Получается в корне сайта есть папка stranica и файл stranica.php.
При запросе /stranica должен исполняться stranica.php.
Или обрезать пустые переменные с помощью map.
А в rewrite тогда использовать /index.php?$tmp;
(?: ) позволяет группировать также как и обычные скобки, но без сохранения результата в переменные $1..$9
Я так понимаю, что там нужно одним выражением обрабатывать переменное количество элементов. Тогда последние 4 части должны быть необязательными
Метасимвол точка совпадает также и со слешем, поэтому предлагаю вместо точки [^/].
Наверно и квантификатор * стоит заменить на +, иначе будет совпадать с адресами вида ////.
Вот еще вариант
Когда в урл менее 5 частей, то последние переменные будут объявлены пустыми
/lol/ => /index.php?value1=lol&value2=&value3=&value4=&value5=
Удалить пустые get параметры можно так
А в key2 = /blabla-url-for-key2/ \ В такой формулировке писать:
gde-kupit-saiding\/centralnii-okrug = /gde-kupit-saiding/centralnii-okrug/ \
или по другому можно проще сделать?
Данный вопрос возник в связи с тем что в данном разделе встречается несколько раз centralnii-okrug.
И такой вопрос, насколько фигово для сайта/сервака наличии такой ереси в количестве 700+ строк? 😂😂😂
Да, "рарработчек" старался когда писал скрипт😂😡🤪
Вместо key2 нужен фрагмент общий для неправильных адресов.
Для /gde-kupit-saiding_keyword/ таким фрагментом был keyword.
Для /gde-kupit-saiding/centralnii-okrug/ таким фрагментом наверно будет centralnii-okrug или centralnii. Смотря как именно коверкает адрес тот глючный скрипт.
А вот количество адресов в списке изрядное. Несколько десятков адресов было бы норм, а вот несколько сотен в .htaccess лучше не запихивать.
Замена несуществующих картинок на /default.jpg
Откуда это взяли?
RewriteRule ^(?<!keyword/)
Я же совсем другой шаблон предлагал.
RewriteRule keyword.(?<!_keyword/)
Сначала в шаблоне идет искомый keyword причем без ^ (это маркер начала строки, он здесь не нужен).
Потом метасимвол точка и негативный просмотр назад (?<! ) с помощью этой конструции проверяем что вокруг keyword нету символов _ и /.
Зацикливания здесь не будет. Этот шаблон не совпадает с адресами где нет keyword, а также не совпадет с правильным адресом gde-kupit-saiding_keyword/ т.к. вокруг keyword есть символы _ и /.
Я специально и ссылку давал https://regex101.com/r/yY8rM8/1. Там можно наглядно посмотреть, какие адреса ловит эта регуляка.
Можно не писать отдельные RewriteRule для каждого слова, а задать списком соответствие слов и урл.
Т.е. формат строк простой.
В начале строки искомое слово. Далее через пробелы и знак равно пишем нужный урл. Далее через пробелы пишем обратный слеш в конце строки.
Главное, чтобы не было пробелов после \, иначе будет ошибка синтаксиса.
Предложенный вариант проверяет наличие keyword, который не обрамлен _ и /.
Если нужна более строгая проверка, то как-то так
---------- Добавлено 23.12.2015 в 16:50 ----------
true
/gde-kupit-saiding_keyword/
false
/keyword/
/saiding_keyword/
/gde-kupit-saiding-keyword-asd/
/gde-kupit-saiding_keyword-asd/
/gde-kupit-saiding_keyword_asd/
/gde-kupit-saiding-keyword-asd/
/gde-kupit-saiding-keyword-asd/
/gde-kupit-saiding-keyword_asd/
/gdekupitsaidingkeyword/
/gdekupitsaidingkeywordasd/
Шаблон keyword.(?<!_keyword/) ловит большую часть ошибочных урл
https://regex101.com/r/yY8rM8/1
---------- Добавлено 23.12.2015 в 16:56 ----------
Или даже так keyword.(?<!gde-kupit-saiding_keyword/)
https://regex101.com/r/yY8rM8/2