apache 如何配置htaccess以显示来自根目录以外的目录的图像

7eumitmz  于 2023-10-23  发布在  Apache
关注(0)|答案(1)|浏览(127)

我正在使用PHP和Apache,我已经配置了一个路由器,它可以向我显示公共网站和根上的图像,没有问题,但当试图显示私人网站的图像时,不会加载它们。

我需要保存在私人网站上的图像,并只显示给业主,我不认为保存在公共网站上的图像是理想的。
路由器已配置为所有路由的公共开始都以“/”而不是“../"开头。
我如何在本地解决这个问题,并使它在真实的服务器上正确工作?.
//项目结构:

app/
-------/public     <======Root
---------------/css
---------------/img
---------------/js
---------------/index.php
---------------/.htaccess
-------/private
---------------/imgs    
---------------/pages
---------------/dashboard.php
-------/lib
-----------/route.php`

//.htaccess config

AddType Content-Type: application / x-www-form-urlencoded

Options -MultiViews
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 

RewriteRule ^(.*)$ index.php? [QSA,L]

联系我们

<span> <img src="img/test2.jpg" width="30px"> </span>
   <span> <img src="../private/imgs/test1.jpg" width="30px"> </span>

//php try

<?php
    $directorio = "../private/imgs/";

    function printImagesDir($dir){
        $files = glob($dir.'*.{jpg,JPG,jpeg,JPEG,png,PNG}', GLOB_BRACE);
        foreach($files as $filename){
            $imgsrc = basename($filename);
            echo "<img src='{$dir}/{$imgsrc}' />";
        }        
    }

    printImagesDir($directorio);
?>
yiytaume

yiytaume1#

将所有图像路由到一个脚本文件中,该脚本文件将获取图像(甚至验证当前登录的用户是否可以访问该文件)。

# .htaccess

# Adjust regex to your needs
RewriteRule images/(\w+\.(?:\w{3,4}))$ images.php?image=$1 [L]
// public/images.php

$image = $_GET['image'] ?? null;

if (empty($image)) {
    throw new Exception('Image not found');
}

$name = dirname(__DIR__) . '/private/imgs/' . $image;
$fp = fopen($name, 'rb');

// Change header depending on file extension!
header('Content-Type: image/png');
header('Content-Length: ' . filesize($name));

fpassthru($fp);

// Terminate further output or image can get corrupt
exit(0);

最后,在HTML中,只需请求该URL:

<img src="images/test1.jpg"/>
<img src="images.php?image=test1.jpg"/>

相关问题