URL с Unicode - ISAPI_Rewrite не распознает его - PullRequest
0 голосов
/ 20 июля 2011

Я использую ISAPI_Rewrite v2 для перезаписи URL довольно долгое время.Сайт на иврите, и поэтому страницы URL.ISAPI_Rewrite v2 не поддерживает ивритские символы, но я решил эту проблему, используя код UTF-8 (Hex) для ивритских символов.Вот пример:

RewriteRule ^/\%D7\%A6\%D7\%95\%D7\%A8_\%D7\%A7\%D7\%A9\%D7\%A8/$ /Contact.aspx [L,I]
RewriteRule ^/\%D7\%A6\%D7\%95\%D7\%A8_\%D7\%A7\%D7\%A9\%D7\%A8$ /Contact.aspx [L,I]

Проблема: при проверке моих популярных страниц в statcounter я наткнулся на этот URL:

http://mysite.com/%u05F6%u05E5%u05F8_%u05F7%u05F9%u05F8

То же правило URL, что и в моем примере, нов юникоде!И, по-видимому, ISAPI_Rewrite v2 не обрабатывает эти URL-адреса, и я получаю сообщение «Страница не найдена».

Есть также более сложные страницы, например, отправка части URL-адреса в качестве параметра запроса.Который также в Unicode.

Я, хотя только на одном решении - сделать те же правила, на этот раз в Unicode и иметь дело с Unicode в коде позади.Но есть 2 проблемы с решением:

  1. URL отображается для пользователя в Unicode, а не на иврите.
  2. Больше кода в коде, за которым, по моему мнению,не должно быть.Я имею в виду, что этот сценарий можно / нужно обработать, прежде чем он достигнет кода ..

Есть мысли?

Спасибо.

РЕДАКТИРОВАТЬ: Может быть, это перенаправление может быть достигнуто с помощью IIS6 как-то?Когда IIS идентифицирует URL-адрес Unicode, он преобразует его в UTF-8 и перенаправляет страницу.

Ответы [ 2 ]

3 голосов
/ 21 июля 2011

ISAPI_Rewrite v2 не поддерживает ивритские символы, но я преодолел эту проблему с помощью UTF-8

IIS в целом требует, чтобы вы использовали UTF-8 в URL. Существует альтернатива использования кодировки по умолчанию для конкретной локали ('ANSI'), когда URL-адрес не является допустимой последовательностью UTF-8, но это (а) бесполезно, если локаль вашего сервера не является ивритом (кодовая страница 1255) и (b) все еще не вполне надежны, поскольку некоторые строки cp1255 также могут быть действительными последовательностями UTF-8. Так что да, для надежности всегда используйте форму UTF-8.

http://mysite.com/%u05F6%u05E5%u05F8_%u05F7%u05F9%u05F8

То же правило URL, что и в моем примере, но в Юникоде!

Не совсем. Синтаксис %uxxxx происходит из функции JavaScript escape() и специфичен для пользовательской формы кодирования функции. Это не имеет отношения к стандартной URL-кодировке. Выше приведен неверный URL, и некоторые браузеры его не принимают.

Вам нужно найти источник этой ссылки и исправить его, чтобы вместо него использовать правильное кодирование UTF-8-% xx.

Тем временем вы могли бы сделать что-то с обработчиком 404, который вместо этого перенаправляет на каноническую форму.

0 голосов
/ 06 октября 2016

Если вы используете какое-то расширение FastCGI за IIS, вы можете попытаться настроить его, чтобы настроить FastCGI для использования кодировки UTF-8 для определенного набора серверных переменных, используйте ключ реестра REGCMULTI_SZ FastCGIUtf8ServerVariables и установите его значение в списке имен серверных переменных.

reg add HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\w3svc\Parameters /v FastCGIUtf8ServerVariables /t REG_MULTI_SZ /d REQUEST_URI\0PATH_INFO

https://www.iis.net/learn/application-frameworks/install-and-configure-php-on-iis/configuring-the-fastcgi-extension-for-iis-60#utf8servervars

...