在我的 Apache httpd.conf 中使用别名指向 cakephp 3.0 目录导致错误 404

Using an alias in my Apache's httpd.conf to point to a cakephp 3.0 directory results in error 404

在我的 CentOS LAMP 上。我有一个网站,www.mydomain.com。在我的 httpd.conf 中,我有:

<VirtualHost *:80>
    ServerAdmin me@myemail.com
    DocumentRoot /var/www/cakephp
    ServerName www.mydomain.com
    <Directory /var/www/cakephp/>
        Options FollowSymLinks
        AllowOverride All
    </Directory>
</VirtualHost>

因此 www.mydomain.com 是从 /var/www/cakephp 提供的。

但我想要它,以便 URL "www.mydomain.com/powercontroller/" 由:/var/www/powercontroller 提供服务。所以我把这个别名也放到 httpd.conf 中:

Alias /powercontroller/ "/var/www/powercontroller/"
<Directory "/var/www/powercontroller/">
    AllowOverride All
</Directory>

但是没有用。我浏览器中的 URL "www.mydomian.com/powercontroller" 给我错误 404 "The requested URL /var/www/powercontroller/webroot/ was not found on this server."

我的 /var/www/powercontroller 目录有以下内容:

.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/    [L]
</IfModule>

index.php

require 'webroot' . DIRECTORY_SEPARATOR . 'index.php';

这些是 Cakephp 3.0 安装程序的默认文件。当然还有一个 webroot 目录,其中包含默认 Cakephp 3.0 中的所有内容。

我知道我一定已经到那里了,因为至少它正在 powercontroller 目录中查找。但出于某种原因,它坚持找不到 webroot。

好的,我明白了。当您别名为 cakephp 3.0 应用程序目录时,您的应用程序目录和 webroot 目录中的 .htaccess 需要一个 RewriteBase 指令。所以在我的例子中,文件 /var/www/powercontroller/.htaccess 和文件 /var/www/powercontroller/webroot/.htaccess 都需要这一行:

RewriteBase /powercontroller/

就在他们的线下方

RewriteEngine on 

此信息几乎无处可寻。 Here's a similar question that was never answered correctly, that I'll now answer. And here's 一个关于 drupal 的类似答案,这是我在一周的搜索中找到的唯一线索。