phpEnv防盗链本质是Apache配置,需启用mod_rewrite模块、设置AllowOverride All,并在.htaccess中用RewriteCond校验Referer,允许空来源及指定域名访问图片等静态资源。

phpEnv 防盗链本质是 Apache 配置,不是 phpEnv 自身功能。直接往网站目录丢 .htaccess 大概率无效,因为默认没开 mod_rewrite 且 AllowOverride 被禁用。
确认并启用 Apache 的 mod_rewrite 和 AllowOverride
phpEnv 底层用的是 Apache,所有防盗链规则都依赖 mod_rewrite 模块和目录级配置权限。不先打开这两项,.htaccess 就是废文件。
- 打开
phpEnv\Apache\conf\httpd.conf,搜索mod_rewrite.so;如果该行开头有#,删掉它,确保变成:LoadModule rewrite_module modules/mod_rewrite.so - 继续搜索
<directory></directory>(路径以你实际站点根目录为准);找到对应块后,把里面的AllowOverride None改成AllowOverride All - 改完必须通过 phpEnv 控制面板或系统托盘图标「重启 Apache」,否则不生效
在网站根目录写有效的 .htaccess 规则
规则只对静态资源(如图片、PDF、ZIP)起作用,不影响 PHP 脚本执行。注意 Windows 下新建 .htaccess 文件容易失败——不能用“另存为”默认的 UTF-8 带 BOM 格式,也不能漏掉英文点。
- 用记事本新建文件 → 「另存为」→ 文件名填
.htaccess(引号不要),编码选「ANSI」或「UTF-8 无 BOM」 - 内容示例(只允许空 Referer 和本地域名访问常见图片格式):
RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^https?://(www\.)?test\.dev [NC] RewriteRule \.(jpg|jpeg|png|gif)$ - [F]其中test.dev要换成你在 phpEnv 里实际配的本地域名;若用localhost或127.0.0.1,就写成localhost -
[F]返回 403 状态码,比跳转更干净;别写成[R=403],语法错误
PHP 脚本里做 Referer 校验的坑
仅靠 $_SERVER['HTTP_REFERER'] 做判断,在开发环境里聊胜于无,上线千万别当真——curl、Postman、甚至前端 JS 跳转都能轻松绕过。
- 必须先
isset($_SERVER['HTTP_REFERER']),否则触发 Notice 错误 - 别用
strpos()匹配完整 URL,比如strpos($_SERVER['HTTP_REFERER'], 'test.dev')容易被http://evil.com/test.dev/xxx绕过 - 正确做法是用
parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST)提取 host,再跟$_SERVER['HTTP_HOST']对比 - 示例片段:
if (!isset($_SERVER['HTTP_REFERER']) || parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) !== $_SERVER['HTTP_HOST']) { header('HTTP/1.1 403 Forbidden'); exit; }
最常被忽略的一点:空 Referer 并不总代表合法访问——浏览器地址栏输入、收藏夹点击、meta refresh、JS 跳转都会丢失 Referer。所以规则里放行空值只是权宜之计,不能替代 Token 或登录态校验等真正可靠的手段。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











