【问题标题】:How can I redirect requests to specific files above the site root?如何将请求重定向到站点根目录上方的特定文件?
【发布时间】:2010-10-01 12:26:24
【问题描述】:

我正在创建一个新网站,但在执行我想要的文件/文件夹组织时遇到了困难:

为了争论,假设我的网站将托管在: http://mywebsite.com/

我希望(已设置)Apache 的虚拟主机将 http://mywebsite.com/ 映射到 /fileserver/mywebsite_com/www 文件夹。

当我决定将一些文件(favicon.ico 和 robots.txt)放入一个文件夹中时,问题就出现了,该文件夹位于 Apache 正在将 http://mywebsite.com/ 安装到的 /www 之上

robots.txt+favicon.ico go into => /fileserver/files/mywebsite_com/stuff

因此,当人们访问 http://mywebsite.com/robots.txt 时,Apache 会为他们提供来自 /fileserver/mywebsite_com/stuff/robots.txt 的文件

我曾尝试通过 mod_rewrite 设置重定向,但唉:

RewriteRule ^(robots\.txt|favicon\.ico)$ ../stuff/$1 [L]

对我没有好处,因为基本上我是在告诉 apache 提供高于其已安装根​​目录的内容。

是否有可能通过以不同方式设置 Apache 的 (2.2.9) 虚拟主机或定义某种 RewriteMap 来实现所需的功能,而不是将相关 URL 重写为其他 URL,而是改写为系统文件路径? 如果不是,那么所需组织(如果有的话)的首选行动方案是什么?

我知道我可以通过 PHP 访问前面提到的文件,然后将它们流式传输 - 比如说使用 readfile(..),但我希望 Apache 做尽可能多的工作 - 它肯定比做更快通过 PHP 进行 I/O。

非常感谢,这已经剥夺了我数小时的建设性工作。更不用说可怜的 Apache 每隔几分钟就会重新启动一次。想想可怜的 Apache :)

【问题讨论】:

    标签: apache .htaccess mod-rewrite virtual-hosts


    【解决方案1】:

    您似乎已设置为使用 RewriteRule。但是,我建议您使用别名:

    Alias /robots.txt /fileserver/files/mywebsite_com/stuff/robots.txt
    

    此外,您必须告知 Apache 该文件的限制。如果您有多个文件以这种方式处理,请针对整个目录执行此操作:

    <Directory /fileserver/files/mywebsite_com/stuff>
        Order allow,deny
        Allow from all
    </Directory>
    

    【讨论】:

    • 这正是我想要的!我以前使用过 Alias,但仅用于重定向到其他目录。我没有想到我可以将它用于特定的网站资源。非常感谢!
    【解决方案2】:

    你可以使用符号链接吗?

    ln -s /fileserver/files/mywebsite_com/stuff/robots.txt /fileserver/files/mywebsite_com/stuff/favicon.ico /fileserver/mywebsite_com/www/
    

    ln 类似于 cp,但使用 -s 创建符号链接而不是副本。)

    【讨论】:

    • 当然,syms 可以工作,但这不是这里的问题。例如,我已经抽出了这两个文件。我真正喜欢的是使用 apache 资源的具体重定向。不过感谢您的提示。
    • 问题是否混乱?将文件放在根网站目录以外的任何地方有什么真正的好处?
    • 不是杂乱无章,因为我可以将文件放在 /fileserver/mywebsite/www/stuff 中。我真的很喜欢所描述的功能。这些文件位于 www 文件夹之外,即使 .htaccess 被删除,也没有人可以访问它们——虽然不太可能。我只是喜欢这个主意。
    • @Limo Driver,如果您不希望人们访问他们,请更改权限。如果您的 apache 用户(在许多安装中为“www-data”)是文件的所有者,请将文件设置为模式 600 (-rw-------),并在此处使用:chmod 600 文件名。
    • “没有人可以访问它们”是什么意思?你不想访问吗?您提供的两个示例是您想要访问的文件。它们属于您的网络根目录。
    猜你喜欢
    • 2012-10-15
    • 2022-01-15
    • 1970-01-01
    • 2023-03-28
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多