RHEL Apache 无法在 URL 中添加尾部斜杠

RHEL Apache 无法在 URL 中添加尾部斜杠

我使用的是 Red Hat Apache Web 服务器 (2.4.6)。如果通过 http 301 访问目录(默认行为),Apache 会在 URL 末尾添加“/”。我想在访问目录时避免 Apache Web 服务器出现 http 301。所以我这样做了。

<Directory /var/www/html>
 Options Indexes FollowSymLinks MultiViews
 AllowOverride all
 DirectorySlash Off
</Directory>

我注意到 DirectorSlash Off 阻止 Apache 自动在 URL 中的目录中添加“/”。

我在 httpd.conf 末尾添加了以下内容,但没有任何效果。我没看到以下内容在 URL 的目录中添加了“/”。重写规则没有触发。知道哪里出了问题吗?

RewriteEngine on
RewriteCond %{REQUEST_URI} !(.+)/$
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+)$ $1/ [P]

提前致谢。

答案1

根据您的评论:

我有一台安装了第三方产品的服务器。我们将其称为 server1,它充当反向代理。server1.com 向下游 Apache Web 服务器发送请求。我们将其称为 server2。当末尾没有斜杠时(例如 server1.com/apple),请求照常转到 server2,并且 server2 在浏览器上发出 http 301,即 server2.com/apple。我不希望发生这种情况,因为 server2 无法在浏览器上直接访问,因此流程中断。所以,这就是我在 Server2 上禁用“DirectorySlash”并使用 RewriteRules 的原因。

问题不在于 server2 上的 Apache 配置。

这也不是您应该尝试修复此问题的地方。

问题在于反向代理配置不正确。反向代理应该识别后端服务器发送的重定向标头,并将其重写为前端反向代理使用的 URI。

在由 Apache 反向代理执行的ProxyPassReverse指示。

在 nginx 上,这种情况通常会正确发生,但是当后端服务器在重定向标头中使用的 URI 与定义中使用的 URI 不匹配时,proxy_pass您需要使用proxy_redirect指示。

其他反向代理也会有类似的选项。...

相关内容