Wordpress игнорирует символы Unicode в URL-адресе
Я использую wordpress с этим типом permalink:
/% год%/% monthnum%/% postname%/
если я использую этот тип URL:
example.com/2010/03/तकनीक
он обрабатывает этот URL-адрес, например, example.com/2010/03/(игнорируя символы unicode)
и отображает список архивов в марте 2010 года.
если я использую английский URL:
example.com/2010/03/technology
то он отлично работает.
Эта проблема возникает даже на странице тегов:
например example.com/tag/इंटरनेट обрабатывается как example.com/tag/и отображает страницу 404.
Почему wordpress игнорирует символы unicode?
Если я использую структуру запросов по умолчанию, то она отлично работает даже с символами Unicode.
Информация о сервере:
Сервер IIS7 Win2008 (включена перезапись URL)
Wordpress 2.9.2
Ответы
Ответ 1
Для обзора проблемы просмотрите:
http://ruslany.net/2010/03/important-update-for-iis-7-0-fastcgi-module/
это относится к уже устаревшему:
http://ruslany.net/2010/02/fastcgi-module-differences-across-iis-versions/
Моя собственная ситуация была исправлена с помощью приложения Win 7 SP1, но, что интересно, мне все еще оставалось применение хакера реестра, описанного в исправлении:
http://support.microsoft.com/kb/2277918
Ответ 2
Я запускаю сервер WAMP на локальной машине. Я тестировал $_SERVER ['PATH_INFO'] на своем веб-сервере IIS7 и обнаружил, что у него есть проблема с unicode. Wordpress использует path_info для обработки URL-адресов.
Я создал файл test.php со следующим кодом:
Если я запрошу http://example.com/test.php/कुछशब्द/कुछऔरशब्द/english
то я получаю этот вывод
---- **** ----
/???????/?????????/английский
---- **** ----
path_info преобразует символы хинди unicode в?????.
Это означает, что в моей переменной есть переменная path_info.
Вы знаете какой-либо параметр IIS7, который может вызвать такой тип проблемы?
Тот же код отлично работает на моем локальном сервере Apache Windows.
Ответ 3
В статье KB статьи содержится исправление, которое не работает для моей версии Windows и/или кода, используемого с помощью Пуск > Выполнить, который также не был эффективным и не добавил ключ реестра по какой-либо причине в моем случае на Windows 7 Ultimate и IIS 7.5.7600
reg add HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\w3svc\Parameters /v FastCGIUtf8ServerVariables /t REG_MULTI_SZ /d REQUEST_URI\0PATH_INFO
Мне нужно было сделать один из следующих вариантов:
1) Добавьте рег. Введите вручную вручную в разделе HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\w3svc\Parameters, добавив новое многострочное значение → Имя значения: FastCGIUtf8ServerVariables
Данные значения (две строки):
REQUEST_URI
PATH_INFO
2) Выполните код, используя cmd.exe, как администратор, затем вставьте код и запустите
В обоих случаях не забудьте выполнить команду iisreset на cmd.exe как администратор после предыдущего шага.