Перезапись Apache2 с экранированием строки запроса дважды

#apache #mod-rewrite #query-string

#apache #мод-перезапись #строка запроса

Вопрос:

Использование этого правила в файле конфигурации виртуального хоста приводит к двойному экранированию параметров запроса:

 RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
  

Например:

 http://example.com?f=hello world
  

Приводит к

 https://example.com?f=hello%20world
  

Обратите внимание на «% 25», экранирующий знак «%». Почему это происходит?

Ответ №1:

Попробуйте добавить тег [NE] (noescape) в конце правила перезаписи:

 RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NE]
  

Это происходит потому, что amp; and ? и некоторые другие экранируются по умолчанию в процессе перезаписи.