URL-адрес с Unicode — ISAPI_Rewrite не распознает его

Я давно использую 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, что и в моем примере, но в Unicode! И, по-видимому, ISAPI_Rewrite v2 не обрабатывает эти URL-адреса, и я, пользователь, получаю «Страница не может быть найдена».

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

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

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

Есть предположения?

Спасибо.

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


person Nir    schedule 20.07.2011    source источник


Ответы (2)


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, что и в моем примере, но в Unicode!

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

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

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

person bobince    schedule 20.07.2011
comment
Я посмотрел немного и увидел, что большинство входов с iOS/safari через мобильный веб-поиск (m.yahoo.com.... , google.com/m/...) или No refering link, который в моем Мнение означает веб-краулер.. Также я вижу некоторые ссылки, которые приходят с моего веб-сайта - я думаю, это потому, что я пытался исправить это вчера. Код моего веб-сайта может обрабатывать этот юникод, но мне нужен способ перенаправить эти URL-адреса Unicode на UTF-8 (R / RP не перенаправляет! Он только помещает ссылку..) - person Nir; 21.07.2011

Если вы используете какое-либо расширение FastCGI за IIS, вы можете попробовать настроить FastCGI для использования кодировки UTF-8 для определенного набора переменных сервера, использовать ключ реестра REG_MULTI_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

person sherdim    schedule 06.10.2016