在我的 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 的类似答案,这是我在一周的搜索中找到的唯一线索。
在我的 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 的类似答案,这是我在一周的搜索中找到的唯一线索。