QSA и urldecode

12
C
На сайте с 04.02.2005
Offline
291
665

.htaccess

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) inf_.php?_route_=$1 [L,QSA]

h**p://site.ru/фффф?search=фффф

inf_.php

<?php
header('Content-Type: text/html; charset=utf-8');
print_r($_GET);

result


Array
(
[_route_] => фффф
[search] => %D1%84%D1%84%D1%84%D1%84
)

h**p://site2.ru/фффф?search=фффф

result

Array
(
[_route_] => ффф
[search] => ффф
)

Разные хостер, разные домены

.htaccess - одинаковые

Почему при REWRITE с QSA ломается QUERY_STRING?

В какую сторну копать, смотреть.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#1

Опишите в чём собственно проблема?

Принудительно обрабатывайте urldecode и всё.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
[umka]
На сайте с 25.05.2008
Offline
456
#2

И виртуальные хосты в одной кодировке?

Лог в помощь!
C
На сайте с 04.02.2005
Offline
291
#3
LEOnidUKG:

Принудительно обрабатывайте urldecode и всё.

принудительно обрабатываю

Но у других хостеров такое не проявляется.

Проблема возникает при REWRITE_RULE с QSA флагом

---------- Добавлено 19.05.2015 в 21:24 ----------

'[umka:
;13725323']И виртуальные хосты в одной кодировке?

Не имею ни малейшего понятия..

Это как-то существенно?

siv1987
На сайте с 02.04.2009
Offline
427
#4

print_r($_SERVER);

Если добавить флаг NC?

---------- Добавлено 19.05.2015 в 21:28 ----------

Chukcha:
Проблема возникает при REWRITE_RULE с QSA флагом

Флаг QSA служит для передаче параметров запроса от клиента если есть пользовательские параметры в реврайте. Без него они вообще будут отсутсвовать.

---------- Добавлено 19.05.2015 в 21:29 ----------

siv1987:
print_r($_SERVER);

Конкретно QUERY_STRING и REQUEST_URI

C
На сайте с 04.02.2005
Offline
291
#5
siv1987:
Если добавить флаг NC?

Пробовал, не дает никакого эффекта

print_r($_SERVER)

Array
(
[PATH] => /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin
[PWD] => /home/virtwww/w_*****_7a6bd0ca/.fast-php
[SHLVL] => 0
[PHP_FCGI_MAX_REQUESTS] => 500
[ORACLE_HOME] => /opt/instantclient/11.2
[FCGI_ROLE] => RESPONDER
[REDIRECT_SCRIPT_URL] => /фффф/usb/
[REDIRECT_SCRIPT_URI] => http://*****/фффф/usb/
[REDIRECT_PHPRC] => /home/virtwww/w_*****_7a6bd0ca/.php/
[REDIRECT_STATUS] => 200
[SCRIPT_URL] => /фффф/usb/
[SCRIPT_URI] => http://*****/фффф/usb/
[PHPRC] => /home/virtwww/w_*****_7a6bd0ca/.php/
[HTTP_HOST] => *****
[HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 5.1; rv:37.0) Gecko/20100101 Firefox/37.0
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
[HTTP_ACCEPT_LANGUAGE] => ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
[HTTP_ACCEPT_ENCODING] => gzip, deflate
[HTTP_COOKIE] => PHPSESSID=odj65r4gl3l4lgs5ehsvgcp4u5;.........
[HTTP_CONNECTION] => close
[HTTP_CACHE_CONTROL] => max-age=0
[HTTP_X_FORWARDED_URI] => /%D1%84%D1%84%D1%84%D1%84/usb/?rrr=%D1%84%D1%84%D1%84
[HTTP_X_FORWARDED_REQUEST] => GET /%D1%84%D1%84%D1%84%D1%84/usb/?rrr=%D1%84%D1%84%D1%84 HTTP/1.1
[SERVER_SIGNATURE] => <address>Apache/2.2.23 (Unix) mod_fcgid/2.3.7 Server at ***** Port 80</address>

[SERVER_SOFTWARE] => Apache/2.2.23 (Unix) mod_fcgid/2.3.7
[SERVER_NAME] => *****
[SERVER_ADDR] => 8***********
[SERVER_PORT] => 80
[REMOTE_ADDR] => 10**********
[DOCUMENT_ROOT] => /home/virtwww/w_*****_7a6bd0ca/http
[SERVER_ADMIN] => [no address given]
[SCRIPT_FILENAME] => /home/virtwww/w_*****_7a6bd0ca/http/index.php
[REMOTE_PORT] => 3113
[REDIRECT_QUERY_STRING] => _route_=%d1%84%d1%84%d1%84%d1%84/usb/&rrr=%25D1%2584%25D1%2584%25D1%2584
[REDIRECT_URL] => /фффф/usb/
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] => _route_=%d1%84%d1%84%d1%84%d1%84/usb/&rrr=%25D1%2584%25D1%2584%25D1%2584
[REQUEST_URI] => /%D1%84%D1%84%D1%84%D1%84/usb/?rrr=%D1%84%D1%84%D1%84
[SCRIPT_NAME] => /index.php
[PHP_SELF] => /index.php
[REQUEST_TIME] => 1432060213
[argv] => Array
(
[0] => _route_=%d1%84%d1%84%d1%84%d1%84/usb/&rrr=%25D1%2584%25D1%2584%25D1%2584
)

[argc] => 1
)

хм...

зы.. не обращаем внимание на наличие index.php и адресные строки (В самом начале

index.php, до всех инициализаций код

if (isset($_GET['rrr'])){ print_r($_GET);print_r($_SERVER);exit;}

Проверка проходит на рабочем ресурсе, и любое вмешательство, нарушающее ... сами знаете

[umka]
На сайте с 25.05.2008
Offline
456
#6
siv1987:
Если добавить флаг NC?

Скорее уж NE :)

---------- Добавлено 19.05.2015 в 21:55 ----------

Chukcha:
Это как-то существенно?

От того, какая кодировка у виртуального хоста, какая дефолтная кодировка у пхп, в каком режиме работает пхп, может зависеть то, в каком виде апач передаёт переменные в пхп и как пхп их предварительно обрабатывает.

Кодировку хоста можно посмотреть в его настройках или в http-заголовках при запросе обычного html-файлика.

Установить кодировку можно в том же .htaccess директивой "AddDefaultCharset utf-8"

В пхп кодировку по-умолчанию смотрите в настройке "default_charset".

C
На сайте с 04.02.2005
Offline
291
#7
'[umka:
;13725410']Скорее уж NE :)

не поверите, я удивился про NC, потому что проверял с NE (нашел в инете). И попробовал Ваше NC (мало ли)

Тут уже на холодное дуешь... И не знаю какой еще тест провести.

---------- Добавлено 19.05.2015 в 21:59 ----------

Но почему у $_SERVER все в порядке, а у $_GET - лажа.

C
На сайте с 04.02.2005
Offline
291
#8

Итак, что я вижу

$_SERVER

[REQUEST_URI] => /%D1%84%D1%84%D1%84%D1%84/usb/?rrr=%D1%84%D1%84%D1%84

[argv] => Array
(
[0] => _route_=%d1%84%d1%84%d1%84%d1%84/usb/&rrr=%25D1%2584%25D1%2584%25D1%2584
)

Array

(
[_route_] => фффф/usb/
[rrr] => %D1%84%D1%84%D1%84%D1%84
)

В какой момент "ломается" $_GET?

[umka]
На сайте с 25.05.2008
Offline
456
#9

Что-то криво настроено в паре mod_fcgid + php.

GET-параметры почему-то дважды escape-ятся.

C
На сайте с 04.02.2005
Offline
291
#10

А urldecode/urlencode именно происходит для параметров из QUERY_STRING (QSA)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий