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,先看文件目录结构:

file on server

在该目录中图片资源访问地址分别为:

  • 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]

Post Comment