【PHP 】伪静态 - 4. 实际运用
伪静态的实际运用
1. 在一个项目中有两个文件夹,public和private, public文件夹的图片可以被所有人访问,private只能被自己访问。如何实现?
第一个方法是:
在public和private下创建.htaccess文件,对于private只让127.0.0.1访问,public文件夹都可以访问。
private文件夹下的配置
order deny,allow #注意deny,allow中间不能由空格 deny from all allow from 127.0.0.1 |
这个的缺点是,没有办法去控制本apache的另外一个虚拟主机的请求。
另外这个不够精细化,他会封杀所有的资源,不仅仅是图片。
于是我们就换一个思路,使用http的referer的防盗链技术。
第二个方法是:
在private文件夹下写一个.htaccess文件
<ifModule rewrite_module> RewriteEngine On # RewriteCond:满足某个条件则放行,不被RewriteRule束缚 # HTTP协议,如果是外网来的必须带一个Referer # 如果请求头不是hsp.fi就封杀 # 但是可以自己模拟一个http请求头,这样就可以取出图片! RewriteCond %{HTTP_REFERER} !hsp.fi #[F] - Forbidden, 如果请求的是jpg图片,则禁用 RewriteRule .*\.jpg -[F] RewriteRule .*\.css -[F] RewriteRule .*\.js -[F] </ifModule> |
注意:如果RewriteCond有多个条件则:
<ifModule rewrite_module> RewriteEngine On # RewriteCond:满足某个条件则放行,不被RewriteRule束缚 # HTTP协议,如果是外网来的必须带一个Referer # 如果请求头不是hsp.fi就封杀 # 但是可以自己模拟一个http请求头,这样就可以取出图片! RewriteCond %{HTTP_REFERER} !hsp.fi RewriteCond %{HTTP_FILENAME} !-f #[F] - Forbidden, 如果请求的是jpg图片,则禁用 RewriteRule .*\.jpg -[F] RewriteRule .*\.css -[F] RewriteRule .*\.js -[F]
#可以配置多份 RewriteCond %{HTTP_REFERER} !hsp2.fi RewriteRule .*\.jpg -[F]
</ifModule> |
课堂练习:
配置一个网站.answer.fi
配置网站的欢迎页面,404,rewrite,public,private图片的控制
1. 配置vhost, 注意allowoverwrite all |
2. 配置host |
3. 建一个文件夹answer |
4. 创建error, public, private目录,和welcome.html, .htaccess文件
.htaccess文件中的配置
Allow from All #配置首页面 DirectoryIndex welcome.html errorDocument 404 /error/404.html |
5. 在error目录下放404.html页面 |
6. 在public目录下做配置
Allow from all |
7. 在private目录下做配置
<ifModule rewrite_module> RewriteEngine On RewriteCond %{HTTP_REFERER} !answer.fi RewriteRule .*\.jpg -[F] </ifModule> |
补充说明:
1. 关于404的说明:
对于ie浏览器而言,404页面的内容大小不能低于512b字节。
2. 如果在<Directory>节点配置了 Options Indexes,同时你又启用了rewriteEngine On你会看到403的提示. 原因是因为我们的父级目录的Options 本身就配好了 Options Indexes FollowSymLinks,
我们要不不配置要么就平配一样的,重写一遍。
伪静态实际运用2:
实现:
RewriteRule ([a-zA-Z_]+)\/([a-zA-Z]+) index.php?c=$1&a=$2
运用3:
rewriteCond指令的介绍
如何做到,当abc.html存在就直接访问abc.html, 否则就去访问index.php?
#如果请求的abc.html不是一个文件就走index, 如果是一个文件就不走过滤机制 RewriteCond %{REQUEST_FILENAME} !-f #并且不是一个目录 RewriteCond %{REQUEST_FILENAME} !-d RewriteRule abc.html index.php |
伪静态实际运用4:
在TP框架中使用rewrite简化url地址,目的是seo,步骤:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具