PHP隐藏静态资源文件真实来源的方法
一 隐藏HTTP资源的来路
最简易的方法,新建文件 show.php
,示例代码以图片
为例:
<?php $url = $_GET['url']; $content = file_get_contents($url); header('Content-type: image/jpeg'); echo $content;
使用方法
/show.php?url=http://www.domain.com/image.jpg
常用的 content type (MIME type)
表,更多请参考:http://hul.harvard.edu/ois/////systems/wax/wax-public-help/mimetypes.htm
File extension | Content type / MIME type |
---|---|
.jpg | image/jpeg |
.gif | image/gif |
.png | image/png |
.wbmp | image/vnd.wap.wbmp |
.txt | text/plain |
二 进阶篇
使用Apache.htaccess
设置静态规则,完全隐藏真实的资源地址,而且又有一个比较友好的URL,先看文件目录结构:
在该目录中图片资源访问地址分别为:
- http://www.domain.com/images/p1.jpg
- http://www.domain.com/images/p2.jpg
那么我们现在想隐藏真实地址,将images
目录换成photos
- http://www.domain.com/photos/p1.jpg
- http://www.domain.com/photos/p2.jpg
#Option1 实现方法
1.限制mages目录的访问
在images
目录下建立.htaccess
文件
Order allow,deny Deny from all
2. 文件转发
建立photos
目录,并创建.htaccess
文件
RewriteEngine On RewriteRule ^([a-zA-Z0-9_.-]+).jpg$ photo.php?image_name=$1
在photos
目录中创建photo.php
文件
<?php if(isset($_GET['image_name'])){ if(file_exists("../images/" . $_GET['image_name'].".jpg")){ header('Content-Type: image/jpg'); readfile("../images/" . $_GET['image_name'].".jpg"); } }
#Option2 RewriteRule
使用.htaccess RewriteRule
RewriteRule ^/photos/(.+).jpg$ /images/$1 [R]