gpt4 book ai didi

php - 当 url 指向现有文件夹(无尾部斜杠)时如何重定向到 404。 HAproxy 或 mod-rewrite 相关

转载 作者:可可西里 更新时间:2023-10-31 22:49:28 26 4
gpt4 key购买 nike

我正在使用监听 80 的 HAProxy 将请求发送到节点服务器(端口:3000)或 php 服务器(4000);我还安装了 CSF,它有可用的端口 3000 和 80。

当我在 http://example.com/forum/1/page.php 浏览页面时它工作正常,但有时当我不小心输入 example.com/forum/1(没有尾部斜杠),它会不断加载并最终导致错误页面 ERR_CONNECTION_TIMED_OUT。地址栏显示已经重定向到http://example.com:4000/forum/1/

由于我没有打开 4000 端口,当我多次访问 example.com/forum/1 时,它会触发 CSF 的阻止。我的问题是,我能否将所有指向实际文件夹 example.com/forum/1(无尾部斜杠)的请求重定向到 404 页面?我已经尝试添加一个重写规则来为每个请求附加一个尾部斜杠,但这会破坏我的所有相对路径(参见我的问题 post)。

所以我想知道的是,为什么我从 http://example.com/forum 重定向到 http://example.com:4000/forum/1//1?是HAproxy引起的吗?

一些 HAproxy 配置:

frontend all 0.0.0.0:80
timeout client 1h
# use apache2 as default webserver for incoming traffic
default_backend apache2

backend apache2
balance roundrobin

option forwardfor
server apache2 myIpAddress:4000 weight 1 maxconn 1024 check

# server must be contacted within 5 seconds
timeout connect 5s
# all headers must arrive within 3 seconds
timeout http-request 3s
# server must respond within 25 seconds. should equal client timeout
timeout server 25s

这是我的重写规则:

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]

RewriteCond %{REQUEST_URI} !^.*\.(jpg|css|js|gif|png)$ [NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]

RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^([^\.]+)$ $1.php [NC,L]

最佳答案

因为 /forum/1 是一个有效的物理目录,你会因为这个设置被重定向到 /forum/1/:

DirectorySlash On

它由名为 mod_dir 的模块使用,如果缺少目录,它会在目录后添加尾部斜杠。

您当然可以使用以下方法关闭此标志:

DirectorySlash Off

但是be aware of security implications .

为了更安全,您还需要:

Options -Indexes

关闭目录列表。

安全警告(从链接手册中复制)

关闭尾部斜杠重定向可能会导致信息泄露。考虑这样一种情况,其中 mod_autoindex 处于事件状态(Options +Indexes)并且 DirectoryIndex 设置为有效资源(例如,index.html),并且有没有为该 URL 定义其他特殊处理程序。在这种情况下,带有尾部斜杠的请求将显示 index.html 文件。但是没有尾部斜线的请求将列出目录内容。


更新:回答这部分问题:

My question is, can I redirect all the requests that are pointing to an actual folder example.com/forum/1 (no trailing slash) to an 404 page?

您可以在 /forum/1/.htaccess 中使用此代码:

DirectorySlash On
RewriteEngine On

RewriteRule ^$ - [L,R=404]

这将强制使用尾部斜杠,以便重写规则可用于发送 404 错误。

关于php - 当 url 指向现有文件夹(无尾部斜杠)时如何重定向到 404。 HAproxy 或 mod-rewrite 相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30594199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com