---
title: "mod_proxy и кодирование URL-символов"
canonical_url: "https://www.zone.lv/help/ru/kb/mod_proxy-i-kodirovanije-url-simvolov/"
post_type: "ht_kb"
published: "2025-11-06T06:42:55+00:00"
modified: "2025-11-06T08:58:33+00:00"
language: "ru"
author: "nikita"
taxonomies:
  ht_kb_category:
    - name: "Apache"
      url: "https://www.zone.lv/help/ru/kb-categories/apache-ru/"
    - name: "Техническое"
      url: "https://www.zone.lv/help/ru/kb-categories/tehnicheskoje/"
  ht_kb_tag:
    - name: "mod_proxy"
      url: "https://www.zone.lv/help/ru/kb-tags/mod_proxy-ru/"
    - name: "nocanon"
      url: "https://www.zone.lv/help/ru/kb-tags/nocanon-ru/"
    - name: "nocanon"
      url: "https://www.zone.lv/help/ru/kb-tags/nocanon-en/"
---

# mod_proxy и кодирование URL-символов

Если для приложения, работающего за прокси, важно, чтобы все символы URL поступали в приложение в неизменном виде, то, к сожалению, перенаправление входящих запросов (mod\_proxy), настраиваемое через **Мой Zone**, для этого не подходит, поскольку оно вносит некоторые изменения в URL перед передачей в приложение.
Например, часть символов кодируется в их шестнадцатеричные эквиваленты. Такие изменения претерпевают, например, символы “**\#**“, “**&amp;**” и “**?**” (превращаясь соответственно в “**%23**“, “**%26**” и “**%3F**“).

Это, в свою очередь, значительно усложняет использование таких приложений, как, например, **Thumbor**. Хотя в случае mod\_proxy теоретически могло бы помочь ключевое слово `nocanon`, **Мой Zone**, к сожалению, не поддерживает эту возможность.

Ситуацию можно решить, заменив **mod\_proxy** на правило **Apache Rewrite**.
Например, добавив блок директив Apache:

```
RewriteCond "%{THE_REQUEST}" "^[A-Z]+\ /([^?\ ]+)/?"
RewriteRule "^/(.*)" "http://127.0.157.196:8888/%1" [P,NE]
```

127.0.157.196 и 8888 необходимо заменить правильными значениями (правильный IP-адрес петли можно найти в панели управления **Мой Zone** в разделе `Веб-хостинг` и `Данные сервера` или, запустив в shell команду `vs-loopback-ip -4`)

Флаг **NE** (No Escape) в правиле **Rewrite** гарантирует, что не происходит никаких изменений в URL и параметрах, передаваемых приложению.
[https://httpd.apache.org/docs/2.4/rewrite/flags.html#flag\_ne](https://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_ne)

 Предупреждение о безопасности! Использование флага **\[NE\] (No Escape)** может представлять угрозу безопасности, если запросы перенаправляются на неизвестный или публичный сервис.
Используйте флаг **\[NE\]** **только** при проксировании во внутренний, доверенный сервис и убедитесь, что backend проверяет URL-адреса и не интерпретирует их как команды командной строки или пути к файлам.

## Подробное объяснение **RewriteCond**

`RewriteCond "%{THE_REQUEST}" "^[A-Z]+\ /([^?\ ]+)/?"`

Это условие, при котором правило применяется.
Здесь используется специальная переменная `%{THE_REQUEST}`, которая содержит исходную строку HTTP-запроса браузера, например:
`GET /images/foo.jpg?size=large HTTP/1.1`

### Пояснение к **регулярному выражению (regexp)**`^<span class="hljs-selector-attr">[A-Z]</span>+\ /(<span class="hljs-selector-attr">[^?\ ]</span>+)/?`:

- `^[A-Z]+` — соответствует HTTP-методу (например `GET`, `POST`, `HEAD` и т.д.)
- `\ /` — пробел + косая черта (так всегда начинается URL)
- `([^?\ ]+)` — захватывает все символы до первого знака вопроса `?` (параметры запроса) или пробела.
    То есть: захватывается только «чистый путь» URL без query string.
- `/?` — допускает один необязательный слэш(косая черта) в конце.

Эта «захваченная» часть сохраняется как **группа %1**, которую можно использовать позже внутри `RewriteRule`.
