2013-10-07 2 views
2

Хорошо, так у меня есть папка проекта под названием MyProjectCakePHP Перенаправление вызовов корневую папку

Этот проект содержит торт.

Теперь у меня есть контроллер под названием UserController, и в этом примере я хочу получить доступ к действию с именем login.

так, когда я иду на следующий сайт: localhost/MyProject/cake/users/login

Я получаю следующее сообщение об ошибке:

'/MyProject/cake/app/webroot/index.php/MyProject/cake/users/login' 

Насколько я могу видеть, что это идет в корневой директории, а затем попытаться перейти в корень моя папка снова, чтобы найти правильный URL. Но у меня нет идеи, почему это делается.

Вот releveant файлы:

папку торт

.htaccess

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

index.php

<?php 
/** 
* Requests collector. 
* 
* This file collects requests if: 
* - no mod_rewrite is available or .htaccess files are not supported 
* - requires App.baseUrl to be uncommented in app/Config/core.php 
* - app/webroot is not set as a document root. 
* 
* PHP 5 
* 
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org) 
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) 
* 
* Licensed under The MIT License 
* Redistributions of files must retain the above copyright notice. 
* 
* @copyright  Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) 
* @link   http://cakephp.org CakePHP(tm) Project 
* @since   CakePHP(tm) v 0.2.9 
* @license  MIT License (http://www.opensource.org/licenses/mit-license.php) 
*/ 

/** 
* Get Cake's root directory 
*/ 
define('APP_DIR', 'app'); 
define('DS', DIRECTORY_SEPARATOR); 
define('ROOT', dirname(__FILE__)); 
define('WEBROOT_DIR', 'webroot'); 
define('WWW_ROOT', ROOT . DS . APP_DIR . DS . WEBROOT_DIR . DS); 

/** 
* This only needs to be changed if the "cake" directory is located 
* outside of the distributed structure. 
* Full path to the directory containing "cake". Do not add trailing directory separator 
*/ 
if (!defined('CAKE_CORE_INCLUDE_PATH')) { 
    define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'lib'); 
} 

require APP_DIR . DS . WEBROOT_DIR . DS . 'index.php'; 

App папки:

.htaccess:

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

index.php:

<?php 
/** 
* PHP 5 
* 
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org) 
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) 
* 
* Licensed under The MIT License 
* Redistributions of files must retain the above copyright notice. 
* 
* @copyright  Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) 
* @link   http://cakephp.org CakePHP(tm) Project 
* @package  app 
* @since   CakePHP(tm) v 0.10.0.1076 
* @license  MIT License (http://www.opensource.org/licenses/mit-license.php) 
*/ 
require 'webroot' . DIRECTORY_SEPARATOR . 'index.php'; 

Webroot FOLDER:

.htaccess

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php [L,QSA] 
    RewriteRule ^/admin$ index.php/dashboards [QSA] 
</IfModule> 

index.php

<?php 
/** 
* Index 
* 
* The Front Controller for handling every request 
* 
* PHP 5 
* 
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org) 
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) 
* 
* Licensed under The MIT License 
* Redistributions of files must retain the above copyright notice. 
* 
* @copyright  Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) 
* @link   http://cakephp.org CakePHP(tm) Project 
* @package  app.webroot 
* @since   CakePHP(tm) v 0.2.9 
* @license  MIT License (http://www.opensource.org/licenses/mit-license.php) 
*/ 
/** 
* Use the DS to separate the directories in other defines 
*/ 
if (!defined('DS')) { 
    define('DS', DIRECTORY_SEPARATOR); 
} 
/** 
* These defines should only be edited if you have cake installed in 
* a directory layout other than the way it is distributed. 
* When using custom settings be sure to use the DS and do not add a trailing DS. 
*/ 

/** 
* The full path to the directory which holds "app", WITHOUT a trailing DS. 
* 
*/ 
if (!defined('ROOT')) { 
    define('ROOT', dirname(dirname(dirname(__FILE__)))); 
// define('ROOT', DS . 'home' . DS . 'me'); 
} 
/** 
* The actual directory name for the "app". 
* 
*/ 
if (!defined('APP_DIR')) { 
    define('APP_DIR', basename(dirname(dirname(__FILE__)))); 
// define ('APP_DIR', 'bloglic-2013'); 
} 

/** 
* The absolute path to the "cake" directory, WITHOUT a trailing DS. 
* 
* Un-comment this line to specify a fixed path to CakePHP. 
* This should point at the directory containing `Cake`. 
* 
* For ease of development CakePHP uses PHP's include_path. If you 
* cannot modify your include_path set this value. 
* 
* Leaving this constant undefined will result in it being defined in Cake/bootstrap.php 
*/ 
    //define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'lib'); 

/** 
* Editing below this line should NOT be necessary. 
* Change at your own risk. 
* 
*/ 
if (!defined('WEBROOT_DIR')) { 
    define('WEBROOT_DIR', basename(dirname(__FILE__))); 
} 
if (!defined('WWW_ROOT')) { 
    define('WWW_ROOT', dirname(__FILE__) . DS); 
} 

// for built-in server 
if (php_sapi_name() == 'cli-server') { 
    $_SERVER['PHP_SELF'] = '/' . basename(__FILE__); 
} 

if (!defined('CAKE_CORE_INCLUDE_PATH')) { 
    if (function_exists('ini_set')) { 
     ini_set('include_path', ROOT . DS . 'lib' . PATH_SEPARATOR . ini_get('include_path')); 
    } 
    if (!include ('Cake' . DS . 'bootstrap.php')) { 
     $failed = true; 
    } 
} else { 
    if (!include (CAKE_CORE_INCLUDE_PATH . DS . 'Cake' . DS . 'bootstrap.php')) { 
     $failed = true; 
    } 
} 
if (!empty($failed)) { 
    trigger_error("CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php. It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR); 
} 

App::uses('Dispatcher', 'Routing'); 

$Dispatcher = new Dispatcher(); 
$Dispatcher->dispatch(new CakeRequest(), new CakeResponse()); 
+0

включен mod_rewrite? – arilia

+0

@arilia да это :) – Marc

ответ

0

кажется, что вы на самом деле не понимая, как RewriteRules работы.

При попытке доступа к URL-адресу http://localhost/MyProject/cake/users/login в RewriteRule

<IfModule mod_rewrite.c> 
    ... 
    RewriteRule ^(.*)$ index.php [L,QSA] 
    ... 
</IfModule> 

перенаправляет все сразу после базового URL (в данном случае http://localhost) в index.php и добавления его там.

Вот почему вы получаете эту ошибку.То, что вы хотите сделать, это получить доступ к сайту, как это:

http://localhost/users/login 

В «фоне» веб-сервер выполняет этот URL, как это:

http://localhost/index.php/users/login 

и вызов по маршруту.

PS: Сообщение об ошибке, которое вы отправили, на самом деле не является сообщением об ошибке, и я предполагаю, что ошибка заключается в том, что я пытался объяснить вам здесь.

+1

, так что я могу сделать, чтобы исправить проблему? : S – Marc

+0

Попробуйте открыть URL-адрес http: // localhost/users/login и проверить, работает ли он так, как ожидалось. – akluth

+0

Запрошенный URL/users/login не найден на этом сервере. – Marc

Смежные вопросы