URL-адреса "в сети" закодированы в обычном ASCII (latin1) - все символы, отличные от ASCII, кодируются клиентами (браузерами) в шестнадцатеричном формате % xx
...
Вы можете найти следующую статью полезной.
Чтобы быть более конкретным: ваш файл конфигурации Apache будет представлять собой обычный текст ASCII, а специальные символы будут закодированы в % xx
шестнадцатеричная форма - вы даже можете перевести ее с помощью простого инструмента, доступного на указанной выше странице w3schools.
RewriteBase / новый / : RewriteRule ^ استینگ / است-لینوکس-عادی / $ /linux-regular.php [L]
Тот факт, что вы установили конкретное значение для RewriteBase
, но указали относительный корневой путь URL-адреса в подстановке RewriteRule
, вызывает тревогу. Директива RewriteBase
влияет только на относительные (не начинающиеся с косой черты или схемы) пути подстановки , поэтому в этом случае она будет просто проигнорирована - что я ' m, конечно, это не намерение - иначе не было бы необходимости устанавливать его в первую очередь.
Удалив префикс косой черты в подстановке RewriteRule
, он будет учитывать RewriteBase
и будет переписан в /new/linux-regular.php
. Например:
RewriteRule ^هاستینگ/هاست-لینوکس-عادی/$ linux-regular.php [L]
Что согласуется с вашим последующим комментарием: «... и удалено / из начала linux-regular.php, и он работал.»
... специальные символы будут закодированы в% xx hex form
В сторону: Хотя запрос должен быть закодирован в% (закодирован URL), путь URL, с которым совпадает шаблон RewriteRule
,% -декодирован (URL декодирован) движок перезаписи. Таким образом, использование фактических символов (UTF-8) в шаблоне RewriteRule
здесь является правильным (в отличие от другого ответа).
Если вам специально нужно сопоставить с% -кодированными URL-путь, тогда вам нужно будет использовать директиву RewriteCond
и проверить серверную переменную THE_REQUEST
.