在php中隐藏图像的真实路径是可能的吗?

在php中隐藏图像的真实路径是可能的吗?,php,server,Php,Server,在我的web服务器中,我有这些文件。我不希望用户找到我到“p1.jpg”和“p2.jpg”的真实路径 当我在“index.php”中显示“p1.jpg”时,如何将原始路径“/images/p1jpg”隐藏到类似这样的“/photo/p1.jpg”中。可能吗?使用 我对Apache重写没有太多经验,但您可以在该目录中创建一个.htaccess文件,其中包含一行内容,如下所示: RewriteRule ^/photos/(.+).jpg$ /images/$1 [R] 在我看来,这有两

在我的web服务器中,我有这些文件。我不希望用户找到我到“
p1.jpg
”和“
p2.jpg
”的真实路径

当我在“
index.php
”中显示“
p1.jpg
”时,如何将原始路径“
/images/p1jpg
”隐藏到类似这样的“
/photo/p1.jpg
”中。可能吗?

使用

我对Apache重写没有太多经验,但您可以在该目录中创建一个
.htaccess
文件,其中包含一行内容,如下所示:

RewriteRule   ^/photos/(.+).jpg$  /images/$1   [R]

在我看来,这有两个部分

1) 使图像/的内容隐藏

2) 这样,用户就可以访问照片/somefile.jpg,并让服务器提供图像/somefile.jpg

1)隐藏图像内容/

在images/中创建一个
.htaccess
文件,并将以下内容放入其中

Order allow,deny
Deny from all
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_.-]+).jpg$ photo.php?image_name=$1
2)为文件提供服务

在照片/中创建一个
.htaccess
文件,并将以下内容放入其中

Order allow,deny
Deny from all
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_.-]+).jpg$ photo.php?image_name=$1
并在photos/目录中创建php文件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");
  }

}

尝试使用
.htaccess
文件并进行Apache重写:查看.htaccess和mod_rewrertequestion:为什么?!这样做的目的是什么?知道文件的“真实位置”有什么好处?这会给你带来什么问题?你能描述一下应用这个代码后会发生什么吗?或者你能推荐一个了解.htaccess文件的最佳来源吗。@Thusitha请单击我在答案中发布的链接。另外,查找正则表达式。虽然这是一个有效的解决方案,但在这里拖出PHP有什么好处?除非你在做一些额外的身份验证逻辑,否则PHP正在做Apache可以做的同样的工作,但在这个过程中使用了更多的资源。这一点是正确的,纯粹从我自己的PHP经验(以及缺乏Apache更复杂部分的经验!)来看,我已经用PHP完成了这项工作,但我完全同意,如果单独使用Apache是可能的,那么就这样做吧;你只是想重写URL。再加上你对原始URL的阻塞就可以了。话虽如此,我仍然在质疑为什么有人需要从这个开始的整个前提。我避免了重写过程,只为这个过程创建了IMAGE.PHP,效果非常好!。我需要隐藏图像名称,因为这些名称引用了我们客户的ID,我们预先提供了隐藏这个“内部”信息,因此为了达到这个目的,ID被加密发送,IMAGE.PHP在调用真正的图像之前对它们进行解密。调用图像->