Назад | Перейти на главную страницу

использование юникода в rewriterule

Я использовал следующие утверждения в .htaccess файл, содержащий символы utf8 в RewriteRule. .htaccess файл сохраняется в блокноте в кодировке utf8. Все страницы сайта сохранены в utf8 и кодировка всего utf8.

<IfModule mod_rewrite.c>
RewriteEngine On 
RewriteBase /new/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^هاستینگ/هاست-لینوکس-عادی/$ /linux-regular.php [L]
</IfModule>

Но когда я перехожу к URL-адресу هاستینگ/هاست-لینوکس-عادی/ просто я получаю ошибку Not Found.

RewriteBase /new/
:
RewriteRule ^هاستینگ/هاست-لینوکس-عادی/$ /linux-regular.php [L]

Тот факт, что вы установили конкретное значение для RewriteBase, но указали путь URL-адреса относительно корня в RewriteRule замена поднимает тревогу. В RewriteBase только директива эффекты родственник (не начинающийся с косой черты или схемы) путь замены, поэтому в этом случае он будет просто проигнорирован - что, я уверен, не является намерением - в противном случае не было бы необходимости устанавливать его в первую очередь.

Удалив префикс косой черты на RewriteRule замена тогда он будет учитывать RewriteBase и будет переписан на /new/linux-regular.php. Например:

RewriteRule ^هاستینگ/هاست-لینوکس-عادی/$ linux-regular.php [L]

Что согласуется с вашим более поздним комментарием: «... и удалил / из запуска linux-regular.php, и это сработало».

... специальные символы будут закодированы в шестнадцатеричной форме% xx

В стороне: Хотя запрос должен быть закодирован в% (закодирован URL-адресом), URL-путь, по которому RewriteRule шаблон совпадение с%-декодируется (URL-декодирование) механизмом перезаписи. Итак, используя фактические символы (UTF-8) в RewriteRule шаблон здесь правильно (в отличие от другого ответа).

Если вам специально нужно сопоставить URL-путь, закодированный в%, вам нужно будет использовать RewriteCond директива и проверьте против THE_REQUEST серверная переменная.

URL-адреса "на проводе" закодированы в простом ASCII (latin1) - все символы, отличные от ASCII, кодируются клиентами (браузерами) в %xx шестнадцатеричный формат ...

Вы можете найти следующие статья полезно.

Чтобы быть более конкретным: ваш файл конфигурации Apache будет представлять собой простой текст ASCII, а специальные символы будут закодированы в %xx шестнадцатеричная форма - вы даже можете перевести ее с помощью простого инструмента, доступного на указанной выше странице w3schools.