.htaccess Apache 核心:错误 20023 20024

.htaccess Apache 核心:错误 20023 20024

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)可以以某种方式修复吗?

答案1

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

相关内容