配置.htaccess:允许REST API调用,禁止浏览器访问且保留无.php后缀规则
解决方案
要实现API仅允许REST调用、禁止浏览器直接访问,同时保留无.php后缀的规则,你可以在原有.htaccess配置基础上添加请求头校验规则,具体配置如下:
RewriteEngine On # 仅允许API请求访问,拒绝浏览器直接访问 # 校验请求头:需包含API常见的媒体类型,或为AJAX请求 RewriteCond %{HTTP_ACCEPT} !application/json [NC] RewriteCond %{HTTP_ACCEPT} !application/xml [NC] RewriteCond %{HTTP_X_REQUESTED_WITH} !=XMLHttpRequest [NC] # 针对你的API路径(示例为v1开头)返回403禁止访问 RewriteRule ^v1/ - [R=403,L] # 原有规则:移除PHP文件后缀 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L]
规则说明
- 请求头校验逻辑:
- 检查
Accept请求头是否包含application/json或application/xml(API接口常用的响应格式),若不包含则判定为浏览器访问; - 补充校验
X-Requested-With头,兼容AJAX发起的API请求;
- 检查
- 路径匹配:
^v1/指定仅对v1开头的API路径生效,若你的API有其他路径前缀,可修改此规则(比如改为^对所有路径生效); - 原有规则保留:继续实现无
.php后缀的访问逻辑,不影响现有API调用方式。
测试验证
- 使用API工具(如Postman、curl)设置
Accept: application/json请求头访问myapi.com/v1/stock?shoes=8-11,可正常返回接口响应; - 直接用浏览器访问该地址,会收到403 Forbidden错误,实现禁止浏览器访问的需求。
内容的提问来源于stack exchange,提问作者Sasa
相关产品推荐
相关产品推荐

