我正在启动一个新的网站,但我在执行所需的文件/文件夹组织方面遇到了困难:
为了论证,让我们说我的网站将托管在: 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每隔几分钟重新启动一次。想想可怜的阿帕奇:)
答案 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/
(ln
与cp
类似,但会创建符号链接而不是-s
的副本。)