yury_finkel: (манул)
[personal profile] yury_finkel
У меня на домашнем компьютере стоит копия моего сайта. До недавнего времени я пользовался пакетом Denwer для PHP и mySQL, но этот пакет был устаревшим и меня заколебал. Поэтому недавно я сделал всё по науке: поставил apache (2.4.12) и mySQL как виндовые сервисы, ещё кое-что похимичил с PHP и т.д. Всё вроде бы работает как надо. НО!

Сегодня совершенно случайно я заметил, что на локальной копии "Энциклопедии марксизма" наблюдается глюк при переходе на ссылку "О произведениях" — передаётся неверный адрес и страница не открывается. Сразу скажу, что на рабочем сервере всё совершенно нормально, глюк вылез именно на локальной машине.

В общем, меня как программиста это заело, и я полдня сегодня просидел у домашнего компьютера, пытаясь выяснить, в чём дело. Как это зачастую в нашей профессии бывает, глюк я исправил (обошёл), но так и не понял окончательной причины. Суть вот в чём: там подключён модуль mod_rewrite, который преобразует удобочитаемые url-и в вызов главного скрипта pmwiki.php с параметрами. В .htaccess написано такое правило:

RewriteRule ^([A-Z0-9\xa0-\xff].*)$ pmwiki.php?n=$1 [QSA,L]

Вроде по логике всё правильно (начальный префикс регулярного выражения тут по специальным причинам, но дело не в нём). Но когда в url присутствует русская буква "х", она съедается! А точнее, съедается второй её байт из юникодного кода. Только и именно с этой буквой. Почему, я так и не понял, гугление не помогло. Съедается именно при подстановке в $1.

Ну, я это дело исправил, тупо добавив перед этим правилом правило

RewriteRule ^([A-Z0-9\xa0-\xff].*)х$ pmwiki.php?n=$1х [QSA,L] #fix a bug on windows

(русская "х" там в utf-8). Т.е. если явно эту букву написать как в поиске, так и в замене, всё работает нормально. Но при подстановке найденного образца почему-то происходит вот такая фигня.

Что это было, Бэрримор? O_o

(no subject)

Date: 21/06/2015 17:23 (UTC)
ext_650685: (Default)
From: [identity profile] alex-dragon.livejournal.com
Глюк PHP или Апача? А вообще я бы первым делом проверил, нет ли где замены аналогичных по рисунку символов латиницы на русский и обратно. Не скажу, что въехал полностью в ситуацию, но частенько это вызывает странные эффекты.

(no subject)

Date: 21/06/2015 17:32 (UTC)
From: [identity profile] yury-finkel.livejournal.com
Однозначно глюк Апача, скорее всего его модуля mod_rewrite, причём, видимо, только под виндой и, возможно, только в этой версии. PHP точно ни при чём. Ему уже приходит искаженная строка (я проверил аж отладчиком).

Никакой замены нет.

И на сервере (линуксовском) всё работает нормально.

Такое ощущение, что код этой буквы совпал с каким-то внутренним кодом Апача. Помните, в Фидо когда-то русская заглавная Н не работала?

(no subject)

Date: 21/06/2015 21:13 (UTC)
ext_650685: (Default)
From: [identity profile] alex-dragon.livejournal.com
Не, не помню, потому что в ФИДО не был никогда. :) Когда оно было, мне комп был просто не по карману в принципе, а потом уже интернеты пошли.

(no subject)

Date: 21/06/2015 17:46 (UTC)
From: [identity profile] rexy-craxy.livejournal.com
Странный глюк.

(no subject)

Date: 21/06/2015 21:13 (UTC)
ext_650685: (Default)
From: [identity profile] alex-dragon.livejournal.com
Кривая сборка — вполне возможно.

(no subject)

Date: 22/06/2015 03:49 (UTC)
From: [identity profile] with-astronotus.livejournal.com
Edited Date: 22/06/2015 03:50 (UTC)

(no subject)

Date: 22/06/2015 06:27 (UTC)
From: [identity profile] monco83.livejournal.com
В старые дни на работе у меня не работал поиск Google с русской буквой "м". Все остальные запросы обрабатывал нормально, а на любой запрос, содержащий русскую "м" плевался какой-то ошибкой. Вероятно, корпоративный прокси был виноват.

March 2022

M T W T F S S
 123456
78910111213
14151617 181920
21222324252627
28293031   

Развернуть каты

No cut tags