我使用的是 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
指示。
其他反向代理也会有类似的选项。...