Mod-Rewrite加载DocumentRoot后面的文件

时间:2008-08-12 03:58:22

标签: .htaccess mod-rewrite

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

home/
    webroot/
    other_files/

我在webroot中有一个.htaccess文件,其中包含以下内容:

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

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

  

在此服务器上找不到请求的URL /home/other_files/file.html。

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

3 个答案:

答案 0 :(得分:13)

我相信您需要添加

部分
<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 /,服务器将知道从何处获取文件。

答案 1 :(得分:0)

只是你知道为什么这个规则不起作用:

它无法重写为/home/other\_files/file.html的原因是mod_rewrite正在将路径解析为/home/webroot/home/other\_files/file.html,因为从mod_rewrite的角度来看,前面的斜杠与{{1}的文档根同等。 1}}。

Ryan Ahearn's suggestion是一个体面的,很可能是你想去的路线。

答案 2 :(得分:0)

归功于Ryan Aheam,但我要拼出来。我是初学者,即使有了Ryan的回答,我也必须尝试一些方法才能使语法正确。

我希望我的DocumentRoot成为我的cakephp目录。但后来我有一个Mantis Bug跟踪器,它只是普通的php,所以不在cakephp目录中。下面的文件我有以下工作。

http://www.my_website.com:由/ var / www / cakephp

提供

http://www.my_website.com/mantisbt:由/ var / www / html / mantisbt

提供

文件/etc/httpd/conf/httpd.conf

Alias /mantisbt/ "/var/www/html/mantisbt/"                                                                          
<Directory "/var/www/html/">                                                                                        
    AllowOverride All                                                                                               
</Directory>                                                                                                        

<VirtualHost *:80>                                                                                                  
    ServerAdmin me@my_email.com                                                                             
    DocumentRoot /var/www/cakephp                                                                                   
    ServerName my_website.com                                                                                      
    <Directory /var/www/cakephp/>                                                                                   
        AllowOverride All                                                                                           
    </Directory>                                                                                                    
</VirtualHost>

文件/var/www/cakephp/.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^mantisbt/?$   /mantisbt/  [NC,L]
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
</IfModule>