如何通过.htaccess阻止上传目录的HTTP GET请求并仅允许POST请求?
解决方案:仅允许POST请求访问上传目录
你之前的.htaccess配置是靠HTTP Referer来拦截媒体文件,这和你要的「只允许POST、禁止GET请求」的需求完全不搭,所以才会出现拦截所有请求的问题。下面给你针对性的配置方案:
方案1:限制整个上传目录仅接受POST请求
如果要让整个上传目录(比如/uploads/)只允许POST请求访问,拒绝所有GET请求,用下面的配置:
RewriteEngine On # 替换成你的实际上传目录路径,比如/uploads/ RewriteCond %{REQUEST_URI} ^/uploads/ [NC] # 检查请求方法是否为GET RewriteCond %{REQUEST_METHOD} =GET # 返回403禁止访问,L表示终止后续规则处理 RewriteRule ^ - [F,L]
配置细节说明:
%{REQUEST_URI} ^/uploads/ [NC]:匹配所有请求路径以/uploads/开头的请求,[NC]表示不区分大小写%{REQUEST_METHOD} =GET:精准匹配请求方法为GET的情况[F,L]:F代表返回403 Forbidden状态码,L代表停止执行后续的Rewrite规则
方案2:仅限制目录内的视频/图片文件
如果你只需要针对目录内的特定媒体文件(比如mp4、mp3、avi、jpg等)做限制,而非整个目录,可以用这个配置:
RewriteEngine On # 匹配上传目录 RewriteCond %{REQUEST_URI} ^/uploads/ [NC] # 匹配指定的媒体文件类型,可按需添加后缀 RewriteCond %{REQUEST_FILENAME} \.(mp4|mp3|avi|jpg|png|gif)$ [NC] # 拦截GET请求 RewriteCond %{REQUEST_METHOD} =GET RewriteRule ^ - [F,L]
这样配置后,只有POST请求能访问目标目录(或指定文件),所有GET请求都会被直接拒绝,完全符合你的需求。
内容的提问来源于stack exchange,提问作者The IRF




