如何通过Apache .htaccess仅允许特定URL访问并实现URL重写?
Apache .htaccess 配置实现指定端点重写与访问控制
问题分析
你之前的两种配置存在以下问题:
- 第一种配置允许直接访问
get.php和report.php,不符合你"仅开放/api/get和/api/report端点"的需求,用户可以绕过API路径直接访问脚本文件。 - 第二种配置中,最后的
RewriteRule ^ - [F]会匹配所有请求,包括重写后的内部请求(比如/api/get重写为get.php后,内部请求的URI是/get.php,会被这条规则拦截返回403),导致所有请求都被禁止。
正确配置方案
以下配置可实现你的需求:仅允许访问/api/get和/api/report两个端点,将它们分别重写为get.php和report.php,同时禁止直接访问PHP脚本及其他任何路径:
RewriteEngine On # 拒绝所有非指定API端点的请求,包括直接访问PHP脚本 RewriteCond %{REQUEST_URI} !^/api/get$ RewriteCond %{REQUEST_URI} !^/api/report$ RewriteRule ^ - [F] # 将API端点重写为对应PHP脚本 RewriteRule ^api/get$ get.php [L] RewriteRule ^api/report$ report.php [L]
配置说明
RewriteCond %{REQUEST_URI} !^/api/get$和RewriteCond %{REQUEST_URI} !^/api/report$:检查请求URI是否不是指定的两个API路径,只要请求不在这两个路径内,就触发后续拒绝规则。RewriteRule ^ - [F]:返回403 Forbidden状态码,拒绝不符合条件的请求。- 重写规则将
/api/get和/api/report映射到对应PHP脚本,[L]标记确保处理完当前规则后停止后续规则执行,保证重写逻辑优先生效。
配置生效后,仅/api/get和/api/report可正常访问,直接访问PHP脚本或其他路径都会被拒绝。
内容的提问来源于stack exchange,提问作者Pre1l
相关产品推荐
相关产品推荐

