如何将请求重定向到站点根目录上的特定文件?

时间:2009-01-15 02:13:07

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

我正在启动一个新的网站,但我在执行所需的文件/文件夹组织方面遇到了困难:

为了论证,让我们说我的网站将托管在: 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能够做必要的工作 - 它必然比做更快I / O通过PHP。

非常感谢,这使我失去了数小时的建设性工作。更不用说糟糕的Apache每隔几分钟重新启动一次。想想可怜的阿帕奇:)

2 个答案:

答案 0 :(得分:4)

您似乎已设置为使用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>

答案 1 :(得分:1)

你能使用符号链接吗?

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

lncp类似,但会创建符号链接而不是-s的副本。)