- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте.
Ситуация такова. Есть сайт, на нём есть офигенно корявый скрипт который был интегрирован в битрикс, который помимо нужного контента генерирует всякую фигню тоесть:
правильно ввв.мой-сайт.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)