【问题标题】:Apache Alias not working in .htaccessApache Alias 在 .htaccess 中不起作用
【发布时间】:2017-02-20 15:13:41
【问题描述】:

我已经在 Ubuntu 16 上安装了 Apache 2.4,一切正常。

我在本地主机上有一个网站,这也可以正常工作。

我需要能够访问 USB 驱动器上的文件才能在网站中使用。

我正在使用 PHP 访问 USB 驱动器并获取文件信息,这很好,但是当我尝试在网页上显示图像时出现问题。

我正在使用 .htaccess 文件并尝试使用 mod_alias 将 USB 驱动器上的文件夹添加到网站中,这是我的 .htaccess 文件中的内容

    DirectoryIndex index.php
    Alias "/USB" "/mnt/sdb1/images"
    <Directory "mnt/sdb1/images">
        Options FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    AddType audio/mpeg .mp3

所以我知道 .htaccess 文件正在工作,因为当我转到 LocalHost 时,它会将我的 index.php 文件加载为主文件。

我知道 U 盘的文件路径是正确的,因为 PHP 脚本已经访问它并收集了要显示在页面上的图像文件,因此 PHP 使用 scandir 来获取文件夹中的所有图像(/mnt/sdb1 /images) 并正确回显到页面以显示图像,例如;

    <img src="/USB/image1.jpg" />

但图像没有加载到页面本身,我认为这是因为别名似乎不起作用。

请帮忙。

【问题讨论】:

    标签: apache .htaccess mod-alias


    【解决方案1】:

    一种可能性是您需要授予对 USB 文件的 www-data 访问权限。通常在 Apache 目录中,您将所有者设置为:

    chown root:www-data *
    chmod 750 * (for directories)
    chmod 640 * (for files)
    

    但是,您可能无法在 USB 驱动器上执行此操作(抱歉,从未处理过 USB),但如果它是特定组,您可以将 www-data 添加到该组:

    sudo usermod -a -G <USBGroup> www-data
    

    因此,例如,我的虚拟机 (/media/sf_node) 上有一个共享驱动器,我猜它的工作原理很像 USB 驱动器。所以当我运行以下命令时:

    ls -la /media/sf_node
    

    我明白了:

    drwxrwx--- 1 root vboxsf 4096 Jan 27 11:10 web
    

    这显示了该目录的组 vboxsf。然后我可以做一个:

    usermod -a -G vboxsf www-data
    

    【讨论】:

    • 感谢您的帮助。我可以通过 PHP 访问驱动器这一事实是否意味着我的权限很好?
    • 不。它是关于 PHP 在代码执行时是谁并且需要对文件的权限。当PHP在你的用户名下运行时,它有你的权限,但是当它在apache下运行时,它是www-data
    • 再次感谢。我尝试了以下方法; sudo chown -R root:www-data /mnt/sdb1 但是它说'不允许操作'
    • 是的,我猜你不能改变它,因为它是一个挂载的驱动器。所以第二个 usermod 可能会这样做,您正在将 www-data 添加到拥有 USB 驱动器的组中(您必须通过查看目录权限来弄清楚
    • 查看我的更新答案,了解适用于类似安装驱动器的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2013-12-16
    • 2017-11-27
    • 1970-01-01
    • 2014-09-03
    • 2015-03-20
    相关资源
    最近更新 更多