Настройки Apache 2.4 по умолчанию, OS 7 Без .htaccess сайт работает нормально. Строка URL-адреса содержит локализованные символы. Создаю файл .htaccess строго по инструкции, чтобы сделать короткий URL. и у меня есть несколько ошибок при загрузке страницы:
(20023)The given path was above the root path: AH00127: Cannot map GET /%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0 HTTP/1.1 to file
(20023)The given path was above the root path: AH00127: Cannot map GET /favicon.ico HTTP/1.1 to file, referer: http://ru.techwik.org/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0
.htaccess
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/index.php [L]
Я не нашел внятного ответа или чего-то не понял. Во-первых, непонятно, почему не работает такое простое правило, которое я взял из нескольких инструкций? Почему не работает внутреннее перенаправление на index.php? Как исправить? А во-вторых, почему не работает RewriteRuke с локализованными экранированными страницами? (ошибка 20024) Это можно как-то исправить?
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/index.php [L]
Вы можете перезаписать только абсолютный путь файловой системы в сервер (или виртуальный хост) контекст. В .htaccess это URL-путь относительно корня документа (с префиксом косой черты). (Какой ответ приходит в браузере? 403?)
Итак, в .htaccess, эту директиву следует записать:
RewriteRule ^(.*)$ /index.php [L]
Или вообще опустите префикс косой черты (т. Е. index.php), так что это относительно каталога .htaccess файл (если RewriteBase указано иное).
В стороне: Нет необходимости иметь обратную ссылку для захвата в RewriteRule шаблон (т.е. (.*)). Регулярное выражение ^(.*)$ проходит весь URL-путь и сохраняет его для использования в дальнейшем (как $1 обратная ссылка). Если вы просто хотите сопоставить что-нибудь (скорее, чем все) затем используйте ^ (начало привязки строки) или .? (необязательный символ) или $ (привязка конца строки). Хотя вы можете избежать ненужных проверок файловой системы при запросе корня документа, проверив . (одиночный символ). Например:
RewriteRule . index.php [L]
Это предполагает, что index.php определяется как DirectoryIndex.