apache - CakePHP、CGI 和 mod_rewrite

标签 apache cakephp mod-rewrite cgi cakephp-2.1

我必须在具有 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/

相关文章:

apache - htaccess 使用 OR 和 NC 重定向

android - 为什么要对 Ice Cream Sandwich 的 SocketInputBuffer 进行此更改?

cakephp如何找到所有型号名称

javascript - $ this-> renderScript()和$ this-> Html-> script()有什么区别?

apache - 如何使用 mod_rewrite 中的环境变量在 httpd.conf 中插入 proxypass

apache - 从 LAN 上的任何计算机访问 Apache VirtualHost?

php - 只有一半的页面加载

cakephp - 我如何调用 cakePHP 中的元素?

php - mod_rewrite 和 mod_userdir 的问题

.htaccess - 如何在有或没有尾斜杠的情况下进行301重定向?