Kohana_HTTP_Exception [404]:在此服务器上找不到请求的URL /

时间:2016-09-17 08:39:56

标签: linux apache .htaccess routes kohana

标准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

中的结构d /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) "/"

2 个答案:

答案 0 :(得分:0)

directorydefaults()的值需要与目录的名称相匹配,以便您需要:

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

修复路线