我必须在具有 CGI-PHP 的环境中运行 CakePHP 2.1 应用程序,并且无法声明 apache 别名。我想使用 mod_rewrite 将对子域的请求重定向到 CakePHP,但这不起作用。
当前设置
- Webroot 是
~/user/public_html
- CakePHP 位于
~/user/public_html/cakephp/
- 应在
dev.mydomain.tld
请求 CakePHP
到目前为止我所拥有的是这个(所有相对于 webroot 的路径):
~/user/public_html/.htaccess
RewriteEngine on Options +FollowSymlinks RewriteCond %{HTTP_HOST} ^(www\.)?dev\.mydomain.com$ [NC] RewriteCond %{REQUEST_URI} !^/cakephp/app/webroot/ [NC] RewriteCond %{REQUEST_URI} !/$ RewriteCond %{DOCUMENT_ROOT}/cakephp/app/webroot%{REQUEST_URI}/ -d RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R,L] RewriteCond %{HTTP_HOST} ^(www\.)?dev\.mydomain.com$ [NC] RewriteCond %{REQUEST_URI} !^/cakephp/app/webroot/ [NC] RewriteRule ^(.*)$ /cakephp/app/webroot/$1 [L]
~/user/public_html/cakephp/app/webroot/.htaccess
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L]
问题
请求在某种程度上没有正确路由(应用程序在我的开发环境中运行没有问题,PHP 作为模块并且虚拟主机位于 /cakephp/app/webroot/
级别)。当我在 dev.mydomain.tld
请求主页时,我只收到一个错误,Cake 告诉我,CakephpController 丢失了。
调试信息
$_SERVER
中有趣的部分被调试为/cakephp/app/webroot/index.php
[REDIRECT_REDIRECT_REDIRECT_STATUS] => 200 [REDIRECT_REDIRECT_STATUS] => 200 [REDIRECT_HANDLER] => php-script [REDIRECT_STATUS] => On [HTTP_HOST] => dev.mydomain.tld [HTTP_CONNECTION] => keep-alive [SERVER_SOFTWARE] => Apache/2.2.21 (Unix) [SERVER_NAME] => dev.mydomain.tld [SERVER_ADDR] => 192.0.43.10 [SERVER_PORT] => 80 [DOCUMENT_ROOT] => /home/user/public_html [SCRIPT_FILENAME] => /home/user/public_html/cakephp/app/webroot/index.php [REDIRECT_URL] => /cakephp/app/webroot/index.php [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => / [SCRIPT_NAME] => /cakephp/app/webroot/index.php [_PHP5_WORK_DIR] => /home/user/public_html/cakephp/app/webroot [PHP_SELF] => / [ORIG_PATH_INFO] => [ORIG_PATH_TRANSLATED] => /home/user/public_html/cakephp/app/webroot/index.php [PATH_INFO] => /cakephp/app/webroot/index.php
传递给调度程序的
CakeRequest
对象中有趣的部分:url => 'cakephp/app/webroot/index.php' base => '/cakephp' webroot => '/app/webroot/' here => '/cakephp/cakephp/app/webroot/index.php'
问题
所以,我在这里不明白的是为什么 CakeRequest 对象引用了我的文件夹结构,而 $_SERVER['REQUEST_URI'] == '/'
。我需要做什么才能做到这一点?首先,我应该在哪里寻找问题:在 mod_rewrite 指令中还是在 CakePHP 本身中?
我尝试了一些方法,包括在所有 .htaccess 文件中设置 RewriteBase 以及在 Configuration 对象中设置 App.baseUrl
,但似乎没有任何帮助。
如果有人能给我指导如何解决这个问题,我将非常感激。
最佳答案
I would be really thankful if somebody could give me a pointer on how to solve this problem.
那我给你指点一下,因为我不知道答案。 :)
你读过this question吗?我在哪里遇到了与你的问题非常相似的问题?
关于apache - CakePHP、CGI 和 mod_rewrite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12080876/