- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко

В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте.
Ситуация такова. Есть сайт, на нём есть офигенно корявый скрипт который был интегрирован в битрикс, который помимо нужного контента генерирует всякую фигню тоесть:
правильно ввв.мой-сайт.ru/pred/gde-kupit-saiding_keyword/
не правильно ввв.мой-сайт.ru/pred/gde-kupit-saiding_keyword-asd/, ввв.мой-сайт.ru/pred/gde-kupit-saiding_keyword_asd/ , ввв.мой-сайт.ru/pred/gdekupitsaidingkeyword/
Как правильно написать в хтаксессе написать правило типа
RewriteEngine On
RewriteRule keyword ввв.мой-сайт.ru/pred/gde-kupit-saiding_keyword/ [L,R=301]
То-есть, если в ссылке есть слово keyword то будет перенапавление на gde-kupit-saiding_keyword
В вариации выше - происходит зацикливание и ничего не работает.
PS-если нужен будет адрес сайта, в личку скину.
Т.е. правильно
_keyword/
Неправильно
_keyword-
_keyword_
gkeyword/
Тогда надо примерно так
Т.е. правильно
_keyword/
Неправильно
_keyword-
_keyword_
gkeyword/
Тогда надо примерно так
правильно только keyword, а всё остальное не правильно.
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/
Ps-да, скрипт настолько корявый к сожалению, и единственное рещение чтобы не переписывать скрипт, настроить редиректы на правильные страницы.
Предложенный вариант проверяет наличие 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
Предложенный вариант проверяет наличие keyword, который не обрамлен _ и /.
Если нужна более строгая проверка, то как-то так
---------- Добавлено 23.12.2015 в 16:50 ----------
Шаблон keyword.(?<!_keyword/) ловит большую часть ошибочных урл
https://regex101.com/r/yY8rM8/1
---------- Добавлено 23.12.2015 в 16:56 ----------
Или даже так keyword.(?<!gde-kupit-saiding_keyword/)
https://regex101.com/r/yY8rM8/2
Приветствую, jkm.
вариация
птопал дальше разбираться.
Откуда это взяли?
RewriteRule ^(?<!keyword/)
Я же совсем другой шаблон предлагал.
RewriteRule keyword.(?<!_keyword/)
Сначала в шаблоне идет искомый keyword причем без ^ (это маркер начала строки, он здесь не нужен).
Потом метасимвол точка и негативный просмотр назад (?<! ) с помощью этой конструции проверяем что вокруг keyword нету символов _ и /.
Зацикливания здесь не будет. Этот шаблон не совпадает с адресами где нет keyword, а также не совпадет с правильным адресом gde-kupit-saiding_keyword/ т.к. вокруг keyword есть символы _ и /.
Я специально и ссылку давал https://regex101.com/r/yY8rM8/1. Там можно наглядно посмотреть, какие адреса ловит эта регуляка.
Можно не писать отдельные RewriteRule для каждого слова, а задать списком соответствие слов и урл.
Т.е. формат строк простой.
В начале строки искомое слово. Далее через пробелы и знак равно пишем нужный урл. Далее через пробелы пишем обратный слеш в конце строки.
Главное, чтобы не было пробелов после \, иначе будет ошибка синтаксиса.
Откуда это взяли?
Я же совсем другой шаблон предлагал.
В итоге заработало в таком виде
в других видах либо зацикливалось, либо ничего не происходило.
jkm Спасибо большое:)
PS-пойду с этим разбираться
---------- Добавлено 25.12.2015 в 19:00 ----------
А в key2 = /blabla-url-for-key2/ \ В такой формулировке писать:
gde-kupit-saiding\/centralnii-okrug = /gde-kupit-saiding/centralnii-okrug/ \
или по другому можно проще сделать?
Данный вопрос возник в связи с тем что в данном разделе встречается несколько раз centralnii-okrug.
И такой вопрос, насколько фигово для сайта/сервака наличии такой ереси в количестве 700+ строк? 😂😂😂
Да, "рарработчек" старался когда писал скрипт😂😡🤪
А в 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 лучше не запихивать.
Правильный тип адреса: /gde-kupit-saiding_keyword/
неправильный: /какое-то_левое_слово_keyword_какое-то_левое_слово/
то-есть, практически любой текст в урл может быть вокруг keyword и гуано скрипт выдаёт страницу и ответ 200.
физически на сайте есть путь /pred/ а далее все подкаталоги и адреса типа
gde-kupit-saiding/centralnii-federalnii-okrug/
kupit-fasadnye-paneli/centralnii-federalnii-okrug/
kupit-vodostoki/centralnii-federalnii-okrug/
prochee/centralnii-federalnii-okrug/
генерятся 1 файлом.
Впринципе, возможно ли указать допустим с начала - определение подраздела а потом уже непосредственно самой страницы?
типа:
RewriteCond %{QUERY_STRING} gde-kupit-saiding
centralnii-federalnii-okrug = /gde-kupit-saiding/centralnii-federalnii-okrug/ \
@%{THE_REQUEST}" ^(?:(\S++)\s+=\s+(\S+)\s+([^@]*+@\S++\s(?!\2)\S+\1)?)++(?(3)|(?!))
RewriteRule ^ %2 [R=301,L]
RewriteCond "\
RewriteCond %{QUERY_STRING} kupit-fasadnye-paneli
centralnii-federalnii-okrug = /kupit-fasadnye-paneli/centralnii-federalnii-okrug/ \
@%{THE_REQUEST}" ^(?:(\S++)\s+=\s+(\S+)\s+([^@]*+@\S++\s(?!\2)\S+\1)?)++(?(3)|(?!))
RewriteRule ^ %2 [R=301,L]
RewriteCond "\
RewriteCond %{QUERY_STRING} kupit-vodostoki
centralnii-federalnii-okrug = /kupit-vodostoki/centralnii-federalnii-okrug/ \
@%{THE_REQUEST}" ^(?:(\S++)\s+=\s+(\S+)\s+([^@]*+@\S++\s(?!\2)\S+\1)?)++(?(3)|(?!))
RewriteRule ^ %2 [R=301,L]
RewriteCond "\
RewriteCond %{QUERY_STRING} prochee
centralnii-federalnii-okrug = /prochee/centralnii-federalnii-okrug/ \
@%{THE_REQUEST}" ^(?:(\S++)\s+=\s+(\S+)\s+([^@]*+@\S++\s(?!\2)\S+\1)?)++(?(3)|(?!))
RewriteRule ^ %2 [R=301,L]
---------- Добавлено 28.12.2015 в 12:19 ----------
в типе
keyword = /pred/gde-kupit-saiding_keyword/ \
@%{THE_REQUEST}" ^(?:(\S++)\s+=\s+(\S+)\s+([^@]*+@\S++\s(?!\2)\S+\1)?)++(?(3)|(?!))
RewriteRule ^ %2 [R=301,L]
Всё работает на ура!!!
Но тут вылазит 1 минуc - все адреса где встречается keyword редиректит на в 1 место (то-есть есть 4 адреса с вхождением и перекидывает на тот который написан в правиле) (собственно не удивительно)
Если ставлю такую вариацию кейворда saiding_keyword - получаю ответ 500 =))))
saiding_keyword = /pred/gde-kupit-saiding_keyword/ \
@%{THE_REQUEST}" ^(?:(\S++)\s+=\s+(\S+)\s+([^@]*+@\S++\s(?!\2)\S+\1)?)++(?(3)|(?!))
RewriteRule ^ %2 [R=301,L]
Ковырялся с настройками, и вылез ещё 1 прикол, ограничение на количество строк/правил всего 150.
Возможно-ли данный массис реализовать через Rewritemap ?
Если да, то как правильней это будет сделать?
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond "\
RewriteMap real-to-user txt:/pred/map.txt
@%{THE_REQUEST}" ^(?:(\S++)\s+=\s+(\S+)\s+([^@]*+@\S++\s(?!\2)\S+\1)?)++(?(3)|(?!))
RewriteRule ^ %2 [R=301,L]
</IfModule>
В такой вариации?
По поводу ограничения в 150 строк. А если не запихивать весь список из сотни адресов в одно правило, а разделить его на несколько правил. По полсотни на каждый RewriteRule.
Чтобы правило работало только для адресов внутри одного раздела /pred/ нужно RewriteRule ^ заменить на RewriteRule ^pred/
Значит адреса имеют такой вид /pred/part1/part2/
В part1 разрешается gde-kupit-saiding, kupit-fasadnye-paneli, kupit-vodostoki, prochee.
В part2 разрешается centralnii-federalnii-okrug и какие-нибудь key2, key3, key4.
Если в part1 или part2 кроме разрешенного значения есть что-то лишнее, то сделать редирект на правильный адрес.
Директива RewriteMap не работает в файле htaccess. Она может использоваться только в контексте server config, <VirtualHost>.
Так что для её примененения нужен доступ к файлам конфигурации веб-сервера (httpd.conf)