如何获取 .htaccess apache2 在 /var/logs/error.log 中报告的错误行号

如何获取 .htaccess apache2 在 /var/logs/error.log 中报告的错误行号

在向 .htaccess 添加重定向后,出现内部服务器错误 - 我已经添加了 600 个重定向。

我检查 /var/logs/error.log

[Wed May 12 16:26:02.600394 2021] [core:alert] [pid 8071] [client 127.127.127.127:60816] /var/www/html/volumes/vol1/mysite/deployment_environments/master/code/.htaccess: Redirect takes one, two or three arguments, an optional status, then document to be redirected and destination URL, referer: my-dummy-example.com/

(出于隐私原因,IP 地址和站点名称已更改为虚拟值)

但它没有告诉我哪个此错误所在的行号。

显然它在一行上发现了错误,所以应该能够告诉我。我有 600 个重定向。如果它能告诉我错误所在的行号,那将会很有帮助。

我查看了它们,没有发现任何问题。这个以前确实有效,所以我看不出现在的问题是什么。我使用转义反斜杠解决了带空格的重定向问题,这在之前的测试中有效。

我已经研究过这个问题但还没有找到答案:

答案1

不幸的是,据我所知,没有办法获取在 Apache 错误日志中报告发生语法错误的“行号”。

LogLevel通常,您可以通过在服务器配置中增加来增加记录消息的详细程度。但是,即使将其增加到LogLevel trace8(“最大值”)也不会提供有关“语法”错误的更多信息 - 这些错误被报告为core:alert,而不是由实际模块报告。

我已经使用转义反斜杠解决了带有空格的重定向问题,并且这在之前的测试中有效。

Redirect这实际上可能就是问题所在……您无法在 mod_alias (和RedirectMatch) 指令中反斜杠转义空格,尝试这样做可能会导致您看到的错误。(也许在您“之前的测试”中,您使用了 mod_rewriteRewriteRule指令?)例如,以下内容将导致上述错误:

# ERROR: "Redirect takes one, two or three arguments, an optional status, then doc..."
Redirect 302 /foo\ bar /baz

如果 URL 参数包含空格,则将整个参数括在双引号中:

# OK
Redirect 302 "/foo bar" /baz

这适用于大多数模块/指令,并且通常比反斜杠转义更可取,因为它通常更具可读性。

在旁边:例如,如果您将其与看起来像反斜杠转义的字符组合在一起,即,"/foo\ bar"那么它将匹配文字反斜杠(后跟一个空格)!(但是,为了真正匹配文字反斜杠 - 即作为 HTTP 请求的一部分进行编码 -AllowEncodedSlashes On需要在服务器配置中进行设置,否则 Apache 将生成 404。)

导致此类错误的另一个常见原因是使用行尾注释(Apache 不支持)。例如:

# ERROR: "Redirect takes one, two or three arguments, an optional status, then doc..."
Redirect 302 /foo /bar  # Comment

相关内容