.htaccess как заставить QUERY_STRING понимать слэш

Bronzo

Созидатель (II)
Сообщения
9
Симпатии
0
Баллы
80
В .htaccess eсть выражение, которое прекрасно работает, пока там простой текст

Код:
RewriteCond %{QUERY_STRING} text
RewriteRule ^ - [R=403,L]

Знак = там тоже обрабатывается нормально

Код:
RewriteCond %{QUERY_STRING} text=5
RewriteRule ^ - [R=403,L]

Но никак не могу разобраться как в этом выражении использовать символ тире - который в адресах DLE встречается постоянно
Также не получается никак использовать точку знак вопроса и слеш, что сильно ограничивает возможности.

Например
text/5
text-5

Вот как их туда вставить?
 
Этот вариант написания вообще единственный рабочий, который мне удалось найти. Что-либо иное не давало никакого результат вообще даже с одними буквами.

Адрес может выглядеть как угодно. Важно, что если в адресе есть искомый набор символ он должен обработаться.

То, что в адресах генерируемых DLE всегда есть знак - который заменяет всё пробелы и знаки препинания при генерации ЧПУ достаточно очевидно.

Не настаиваю на конкретном варианте написания, мне важен результат. Как обработать содержащие символ - названия новостей? "Может быть" меня не интересует, меня интересует гарантированный результат. Гадать и пробовать варианты из гугла этим добром сыт по горло, поэтому и спрашиваю здесь. Моих мозгов понять весь принцип работы .htaccess с ноля, только читая документацию, оказалось недостаточно.
 
Там важно в какой части адреса находится искомый набор символов.
/text/5 или /index.php?text/5 или /?text/5
Apache-конфиг:
# Если адрес http://site.ru/text/5
RewriteRule text/5 - [R=403,L]

# Если адрес http://site.ru/?text/5
RewriteCond %{QUERY_STRING} text/5
RewriteRule ^ - [R=403,L]
Эти правила нужно ставить выше остальных т.е. в начало файла сразу после RewriteEngine On.

Если что-то не получается, то показывайте как пробовали.
Весь файл .htaccess и точный адрес который пытались блокировать.
 
Адрес может выглядеть как угодно. Важно, что если в адресе есть искомый набор символ он должен обработаться.
Есть две разные сущности: %{QUERY_STRING} и %{REQUEST_URI}
Если искать везде, то:

Apache-конфиг:
RewriteCond %{REQUEST_URI} text-5 [OR]
RewriteCond %{QUERY_STRING} text-5
RewriteRule ^ - [R=403,L]
 
Хотя мне и не удалось разобраться отчего с QUERY_STRING тире не опознается, а с REQUEST_URI тире распознаётся, однако это работает.

вопрос с тире можно считать решённым.

А вот что делать со слэшем всё ещё непонятно. Вариант
text /5
задать не получается
 
Хотя мне и не удалось разобраться отчего с QUERY_STRING тире не опознается, а с REQUEST_URI тире распознаётся, однако это работает.
Потому что часть URL, видимо, относится к REQUEST_URI.
 
exsample.com/text

Адреса в DLE все имеют вид
exsample.com/1234-text1-text2

Если использовать QUERY_STRING
срабатывает
text1
text2
1234
не срабатывает
-text2
1234-

Если использовать REQUEST_URI. всё перечисленное срабатывает.

Однако com/text не срабатывает. Если просто указать text, это будут встречаться не только сразу после домена, но и много ещё где.
 
Действительно, так работает. Благодарю за помощь. Всё-таки сложная эта штука синтаксис.
 
Назад
Верх