在DocumentRoot后面进行Mod-Rewrite加载文件

时间:2020-03-05 18:39:04  来源:igfitidea点击:

我正在使用.htaccess和mod_rewrite指向位于DocumentRoot后面的文件。我的文件夹结构如下所示:

home/
    webroot/
    other_files/

我在webroot中有一个.htaccess文件,内容如下:

RewriteEngine on
RewriteRule ^(.*)$ /home/other_files/

如果我尝试访问http://example.com/file.html,则会收到以下错误消息:

The requested URL /home/other_files/file.html was not found on this server.

甚至可以加载DocumentRoot后面的文件吗?如果是这样,有人可以指出我正确的方向吗?

解决方案

回答

我相信我们需要添加一个部分

<Directory "/home/other_files">
  (options)
</Directory>

到服务器配置之前,apache将能够从中提供任何服务。例如,我的DocumentRoot是/ var / www,但是默认可用站点中有以下部分:

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

然后,我们可以重写URL以转到/ doc /,服务器将知道从何处获取文件。

回答

只要我们知道为什么该规则不起作用:

无法将其重写为/ home / other \ _files / file.html的原因是mod_rewrite将路径解析为/ home / webroot / home / other \ _files / file.html,因为来自mod_rewrite的观点来看,前面的斜杠等同于/ home / webroot的文档根目录。

瑞安·阿赫恩(Ryan Ahearn)的建议很不错,很可能是我们想走的路线。