使用VirtualHost和mod_rewrite找不到文件

时间:2012-05-22 13:14:01

标签: apache mod-rewrite mod-vhost-alias

我正在基于Tonic建立一个RESTful api。 在我的开发者机器和舞台服务器上,我们使用虚拟主机。

Tonic使用.htaccess文件将调用调用转换为它的dispatcher.php文件。这在没有启用VirtualHosts的服务器上正常工作。

但是,如果我启用VirtualHosts,即使文件的路径和名称是正确的,我也找不到找到的文件。

以下是我的开发者计算机上的VirtualHost设置。

<VirtualHost *:80>
    ServerAdmin admin@xxxxxxxxxxxx
    ServerAlias *.dev.xxxxx
    VirtualDocumentRoot /home/xxxxxxxx/workspace/%1
    <Directory /home/xxxxxxxx/workspace/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

</VirtualHost>

Tonic的.htacces位于项目根目录中名为rest的文件夹中:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !dispatch\.php$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* dispatch.php [L,QSA]
</IfModule>

致电http://project.dev.xxxxx/rest/会给出:

Not Found
The requested URL /home/xxxxxxxx/workspace/project/rest/dispatch.php was 
not found on this server.

Apache/2.2.22 (Ubuntu) Server at xxxxxxx Port 80

1 个答案:

答案 0 :(得分:0)

好像你在滥用VirtualDocumentRoot。尝试将其更改为:

DocumentRoot /home/xxxxxxxx/workspace/project/rest

此外,这是VirtualDynamicRootDynamically configured mass virtual hosting

的一个很好的解释

希望有所帮助。