zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【PHP 】伪静态 - 4. 实际运用

PHP静态 运用 实际
2023-09-14 08:59:22 时间

伪静态的实际运用

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,步骤: