【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,步骤:
相关文章
- php处理字符串中的emoji
- 单例模式 指令重排_php单例模式
- mac下使用brew配置nginx+php+mysql+PostgreSQL
- php pdo mysql存入转义详解数据库
- 实现快乐:基于PHP与MySQL的项目(phpmysql项目)
- MySQL与PHP设置时区(mysql时区php)
- MySQL 锁表与 PHP 数据交互实现(mysql锁表php)
- 型MySQL与PHP:助力开发的完美组合(mysqlphp类)
- PHP操作MySQL数据库:实现快速连接(php连接数据库mysql)
- 快速步骤:安装PHP访问Oracle数据库(php安装oracle)
- Linux切换PHP版本:快速而安全的方法(linux切换php版本)
- ubuntu 12.04 安装 Nginx+PHP5 (PHP-FPM) +MySQL主机详解
- 学习PHP与MySQL:一个完美的开始(php与mysql教程)
- PHP操作MySQL数据库的完整指南(php读写mysql)
- Linux操作系统下的PHP编译器使用技巧(linux php编译器)
- PHP如何连接MS SQL服务器(php怎么链接mssql)
- 基于 PHP 和 MSSQL 的连接类开发实战(php mssql连接类)
- 在Linux环境下,使用PHP发送邮件(linux发送邮件php)
- 混合开发助力企业信息化C语言PHP和MySQL联动提升系统性能(c php mysql)
- 用PHP调用数据库的存贮过程
- PHP的面向对象编程
- php和js交互一例-PHP教程,PHP应用
- php不用正则采集速度探究总结
- 不用mod_rewrite直接用php实现伪静态化页面代码
- PHP伪静态隐藏传递参数名的四种方法
- 透析PHP的配置文件php.ini
- PHP和Mysqlweb应用开发核心技术第1部分Php基础-1开始了解php
- smarty实现PHP静态化的两种方法分享
- PHP添加Xdebug扩展的方法