【问题标题】:Kohana 3 routing not working properly when in the format controller/actionKohana 3 路由在格式控制器/操作中无法正常工作
【发布时间】:2012-05-15 09:48:17
【问题描述】:

我是 Kohana 的新手。我正在使用 Kohana 3.2 中的 默认路由,即

Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
    'controller' => 'admin',
    'action'     => 'login',
));

我的控制器如下:

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Admin extends Controller{

public function __construct($request, $response) {
    parent::__construct($request, $response);
}

public function action_login(){
    $session = Session::instance();
    if($session->get('admin_id')){
        //Session is set / Logged in
        $this->request->redirect('users/list');
        exit();
    }

    if($_POST){
       $user = ORM::factory('admin');
       $post = Validation::factory($_POST)
               ->rule('username', 'not_empty')
               ->rule('password', 'not_empty');
        if(!$post->check()){
            Message::error($post->errors('admin'));
        }
        else{
            $objUserDetails = $user->checkCredentials($_POST);
            if($objUserDetails->id){
                //Valid username and password
                $session->set('admin_id', $objUserDetails->id);
                $this->request->redirect('users/list');
                exit();
            }
            else{
                Message::error("Invalid username or password");
                $this->request->redirect('admin/login');
                exit();
            }
        }
    }

    $this->response->body(new View(
                'login',
                array('title'=>'Administrator login')
            ));
}

public function action_logout(){
    $session = Session::instance();
    $session->delete('admin_id');
    $session->destroy();
    $this->request->redirect('admin/login');
}

}

我的.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://localhost 时,它工作正常。但是当我输入 http://localhost/admin/loginhttp://localhost/admin/logout 时,它会显示 404 错误。

请帮忙。

【问题讨论】:

  • 你的.htaccess 开启了吗?尝试在那里输入错误的内容,例如“foobar”,然后检查请求是否收到 500 错误
  • @zerkms 我照你说的做了。而不是 500 我得到 404 错误。这意味着 mod_rewrite 被禁用了吗?
  • 表示整个.htaccess被禁用。找到AllowOverride 并将其设置为All 在您的httpd.conf
  • 谢谢@zerkms。它奏效了。

标签: php .htaccess kohana kohana-3


【解决方案1】:

您的.htaccess 已禁用,因此您需要在httpd.conf 中找到AllowOverride 并将其设置为All

【讨论】:

猜你喜欢
  • 2019-09-22
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 2017-11-09
  • 2019-12-31
相关资源
最近更新 更多