Я использовал следующие утверждения в .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.