标准Hello World
运作良好:
Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'controller' => 'welcome',
'action' => 'index',
));
如果我更改为其他Controller,例如Controller / Site / Test.php,那么我有一条错误消息:
Kohana_HTTP_Exception [404]:找不到请求的网址/ 这个服务器。
Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'directory' => 'site'
'controller' => 'test',
'action' => 'index',
));
控制器是 Test.php :
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Test extends Controller {
public function action_index()
{
$this->response->body('hello, t world!');
}
} // End Test
bootstrap.php中
Kohana::init(array(
'base_url' => '/',
'index_file' => FALSE,
));
的.htaccess
# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /
# Protect hidden files from being viewed
<Files .*>
Order Deny,Allow
Deny From All
</Files>
# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]
http://kohanafr
/var/www/html/kohanafr
调整virtualhost
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName kohanafr
ServerAlias www.kohanafr
DocumentRoot /var/www/html/kohanafr
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
apache config
:
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
添加。这个错误代码:
SYSPATH/classes/Kohana/Request/Client/Internal.php [ 80 ]
75 if ( ! class_exists($prefix.$controller))
76 {
77 throw HTTP_Exception::factory(404,
78 'The requested URL :uri was not found on this server.',
79 array(':uri' => $request->uri())
80 )->request($request);
81 }
82
83 // Load the controller using reflection
84 $class = new ReflectionClass($prefix.$controller);
85
1. SYSPATH/classes/Kohana/Request/Client.php [ 114 ] » Kohana_Request_Client_Internal->execute_request(arguments)
0
object Request(19) {
protected _requested_with => NULL
protected _method => string(3) "GET"
protected _protocol => string(8) "HTTP/1.1"
protected _secure => bool FALSE
protected _referrer => NULL
protected _route => object Route(5) {
protected _filters => array(0)
protected _uri => string(32) "(<controller>(/<action>(/<id>)))"
protected _regex => array(0)
protected _defaults => array(3) (
"directory" => string(4) "site"
"controller" => string(4) "test"
"action" => string(5) "index"
)
protected _route_regex => string(95) "#^(?:(?P<controller>[^/.,;?\n]++)(?:/(?P<action>[^/.,;?\n]++)(?:/(?P<id>[^/.,;?\n]++))?)?)?$#uD"
}
protected _routes => array(0)
protected _header => object HTTP_Header(0) {
}
protected _body => NULL
protected _directory => string(4) "Site"
protected _controller => string(4) "Test"
protected _action => string(5) "index"
protected _uri => string(0) ""
protected _external => bool FALSE
protected _params => array(0)
protected _get => array(0)
protected _post => array(0)
protected _cookies => array(0)
protected _client => object Request_Client_Internal(9) {
protected _previous_environment => NULL
protected _cache => NULL
protected _follow => bool FALSE
protected _follow_headers => array(1) (
0 => string(13) "authorization"
)
protected _strict_redirect => bool TRUE
protected _header_callbacks => array(1) (
"Location" => string(34) "Request_Client::on_header_location"
)
protected _max_callback_depth => integer 5
protected _callback_depth => integer 1
protected _callback_params => array(0)
}
}
1
object Response(5) {
protected _status => integer 200
protected _header => object HTTP_Header(0) {
}
protected _body => string(0) ""
protected _cookies => array(0)
protected _protocol => string(8) "HTTP/1.1"
}
2。 SYSPATH / classes / Kohana / Request.php [993]»Kohana_Request_Client-&gt;执行(参数)
0
object Request(19) {
protected _requested_with => NULL
protected _method => string(3) "GET"
protected _protocol => string(8) "HTTP/1.1"
protected _secure => bool FALSE
protected _referrer => NULL
protected _route => object Route(5) {
protected _filters => array(0)
protected _uri => string(32) "(<controller>(/<action>(/<id>)))"
protected _regex => array(0)
protected _defaults => array(3) (
"directory" => string(4) "site"
"controller" => string(4) "test"
"action" => string(5) "index"
)
protected _route_regex => string(95) "#^(?:(?P<controller>[^/.,;?\n]++)(?:/(?P<action>[^/.,;?\n]++)(?:/(?P<id>[^/.,;?\n]++))?)?)?$#uD"
}
protected _routes => array(0)
protected _header => object HTTP_Header(0) {
}
protected _body => NULL
protected _directory => string(4) "Site"
protected _controller => string(4) "Test"
protected _action => string(5) "index"
protected _uri => string(0) ""
protected _external => bool FALSE
protected _params => array(0)
protected _get => array(0)
protected _post => array(0)
protected _cookies => array(0)
protected _client => object Request_Client_Internal(9) {
protected _previous_environment => NULL
protected _cache => NULL
protected _follow => bool FALSE
protected _follow_headers => array(1) (
0 => string(13) "authorization"
)
protected _strict_redirect => bool TRUE
protected _header_callbacks => array(1) (
"Location" => string(34) "Request_Client::on_header_location"
)
protected _max_callback_depth => integer 5
protected _callback_depth => integer 1
protected _callback_params => array(0)
}
}
第3。 DOCROOT / index.php [118]»Kohana_Request-&gt; execute()
113 /**
114 * Execute the main request. A source of the URI can be passed, eg: $_SERVER['PATH_INFO'].
115 * If no source is specified, the URI will be automatically detected.
116 */
117 echo Request::factory(TRUE, array(), FALSE)
118 ->execute()
119 ->send_headers(TRUE)
120 ->body();
121 }
Internal.php echo Debug::vars($_SERVER,$request,$request->uri())
echo Debug::vars($_SERVER,$request,$request->uri());
if ( ! class_exists($prefix.$controller))
{
throw HTTP_Exception::factory(404,
'The requested URL :uri was not found on this server.',
array(':uri' => $request->uri())
)->request($request);
}
转储:
array(29) (
"HTTP_HOST" => string(8) "kohanafr"
"HTTP_USER_AGENT" => string(74) "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:44.0) Gecko/20100101 Firefox/44.0"
"HTTP_ACCEPT" => string(63) "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
"HTTP_ACCEPT_LANGUAGE" => string(14) "en-US,en;q=0.5"
"HTTP_ACCEPT_ENCODING" => string(13) "gzip, deflate"
"HTTP_CONNECTION" => string(10) "keep-alive"
"PATH" => string(60) "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
"SERVER_SIGNATURE" => string(69) "<address>Apache/2.4.10 (Ubuntu) Server at kohanafr Port 80</address>
"
"SERVER_SOFTWARE" => string(22) "Apache/2.4.10 (Ubuntu)"
"SERVER_NAME" => string(8) "kohanafr"
"SERVER_ADDR" => string(9) "127.0.0.1"
"SERVER_PORT" => string(2) "80"
"REMOTE_ADDR" => string(9) "127.0.0.1"
"DOCUMENT_ROOT" => string(22) "/var/www/html/kohanafr"
"REQUEST_SCHEME" => string(4) "http"
"CONTEXT_PREFIX" => string(0) ""
"CONTEXT_DOCUMENT_ROOT" => string(22) "/var/www/html/kohanafr"
"SERVER_ADMIN" => string(19) "webmaster@localhost"
"SCRIPT_FILENAME" => string(32) "/var/www/html/kohanafr/index.php"
"REMOTE_PORT" => string(5) "43568"
"GATEWAY_INTERFACE" => string(7) "CGI/1.1"
"SERVER_PROTOCOL" => string(8) "HTTP/1.1"
"REQUEST_METHOD" => string(3) "GET"
"QUERY_STRING" => string(0) ""
"REQUEST_URI" => string(1) "/"
"SCRIPT_NAME" => string(10) "/index.php"
"PHP_SELF" => string(10) "/index.php"
"REQUEST_TIME_FLOAT" => float 1474108538.614
"REQUEST_TIME" => integer 1474108538
)
object Request(19) {
protected _requested_with => NULL
protected _method => string(3) "GET"
protected _protocol => string(8) "HTTP/1.1"
protected _secure => bool FALSE
protected _referrer => NULL
protected _route => object Route(5) {
protected _filters => array(0)
protected _uri => string(32) "(<controller>(/<action>(/<id>)))"
protected _regex => array(0)
protected _defaults => array(3) (
"directory" => string(4) "site"
"controller" => string(4) "test"
"action" => string(5) "index"
)
protected _route_regex => string(95) "#^(?:(?P<controller>[^/.,;?\n]++)(?:/(?P<action>[^/.,;?\n]++)(?:/(?P<id>[^/.,;?\n]++))?)?)?$#uD"
}
protected _routes => array(0)
protected _header => object HTTP_Header(0) {
}
protected _body => NULL
protected _directory => string(4) "Site"
protected _controller => string(4) "Test"
protected _action => string(5) "index"
protected _uri => string(0) ""
protected _external => bool FALSE
protected _params => array(0)
protected _get => array(0)
protected _post => array(0)
protected _cookies => array(0)
protected _client => object Request_Client_Internal(9) {
protected _previous_environment => NULL
protected _cache => NULL
protected _follow => bool FALSE
protected _follow_headers => array(1) (
0 => string(13) "authorization"
)
protected _strict_redirect => bool TRUE
protected _header_callbacks => array(1) (
"Location" => string(34) "Request_Client::on_header_location"
)
protected _max_callback_depth => integer 5
protected _callback_depth => integer 1
protected _callback_params => array(0)
}
}
string(1) "/"
答案 0 :(得分:0)
directory
中defaults()
的值需要与目录的名称相匹配,以便您需要:
Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'directory' => 'Site' /* Note capital 'S' */
'controller' => 'test',
'action' => 'index',
));
答案 1 :(得分:0)
看看这个:
Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'directory' => 'site'
'controller' => 'test',
'action' => 'index',
));
路线中没有“目录”部分。因此,当您打开Controller / Site / Test时,它将以这种方式解析:
controller => Controller
action => Site
id => Test
修复路线