13

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

home/
    webroot/
    other_files/

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

重写引擎开启
重写规则 ^(.*)$ /home/other_files/$1

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

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

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

4

3 回答 3

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/,服务器将知道从哪里获取文件。

于 2008-08-12T04:21:54.857 回答
1

只是为了让您知道为什么该规则不起作用:

它无法重写的原因/home/other_files/file.html是 mod_rewrite 正在解析路径,/home/webroot/home/other_files/file.html因为从 mod_rewrite 的角度来看,前面的斜杠相当于您的文档根目录/home/webroot

Ryan Ahearn 的建议是一个不错的建议,并且很可能是您想要走的路线。

于 2008-08-12T21:08:45.667 回答
1

这要归功于 Ryan Aheam,但我将把它拼出来。我是一个初学者,即使有了 Ryan 的回答,我也不得不尝试一些事情来获得正确的语法。

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

http://www.example.com: 服务于 /var/www/cakephp

http://www.example.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>
于 2015-09-12T02:43:39.117 回答