Kohana 3:隐藏网址的一部分

时间:2015-11-16 11:09:23

标签: .htaccess redirect kohana kohana-3

我在Kohana 3中隐藏了部分网址时遇到了问题。

存在admin子文件夹中存在控制器。 这些控制者是网站的管理员。 所以当我输入:

http://mysite.xyz/admin

它运作正常。我只需要该kohana项目的管理面板,我决定创建子域admin

所以现在当我输入:

http://admin.mysite.xyz/admin

它运作正常。 但是我想隐藏admin部分网址以及何时输入:

http://admin.mysite.xyz

我不会加载kohana网站,而是加载管理面板。

这是我的.htaccess:

RewriteEngine On
RewriteBase /

###### Add trailing slash (optional) ######
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [L,R=301,NE]

RewriteCond %{REQUEST_METHOD} !POST
RewriteRule ^(.*)index.php/(.*)$ /$1$2 [R=301,L,NE]

RewriteCond $1 ^(index\.php|robots\.txt|favicon\.ico|media)
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?kohana_uri=$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^(www.)?admin.schoener-tauchen.pl$
RewriteRule ^(/)?$ admin [L]

RewriteRule ^admin/(.+)$ $1 [L,NC,R]

它不起作用。它给出了404错误。

有人可以帮忙吗?

PS。在这种情况下,更改Kohana路由非常复杂。 Htaccess的变化似乎更容易。

修改

bootstrap.php route:

Route::set('admin', 'admin(/<controller>(,<action>(,<id>)(,<id2>)(,<id3>)))')
    ->defaults(array(
        'directory' => 'admin',
        'controller' => 'home',
        'action'     => 'index',
));

Route::set('default', '(<controller>(,<action>(,<id>)))', array('controller'=>'\w+','controller'=>'\w+', 'action'=>'\w+', 'param' => '.+'))
    ->defaults(array(
        'directory' => 'admin',
        'controller' => 'home',
        'action'     => 'index',
));

3 个答案:

答案 0 :(得分:0)

使用bootstrap.php

$is_admin = preg_match('/^admin\.schoener-tauchen\.pl$/', $_SERVER['HTTP_HOST']);
Route::set('default', '(<action>(/<id>))')
    ->defaults(array(
        'controller' => $is_admin ? 'admin' : 'index',
        'action'     => 'index',
));

从.htaccess中删除

RewriteCond %{HTTP_HOST} ^(www.)?admin.schoener-tauchen.pl$
RewriteRule ^(/)?$ admin [L]

RewriteRule ^admin/(.+)$ $1 [L,NC,R]

答案 1 :(得分:0)

我会建议这个解决方案,在bootstrap中注释掉这两个路由并用它替换它们。

Kohana::init ( array (
        'base_url' => '/'
));

Route::set('default', '(<controller>(,<action>(,<id>)(,<id2>)(,<id3>)))')
    ->defaults(array(
        'directory' => 'admin',
        'controller' => 'home',
        'action'     => 'index',
));

这是Kohana official route guide

答案 2 :(得分:0)

确定。我通过.htaccess中的黑客解决了它:

RewriteRule ^admin/(.+)$ $1 [L,NC,R]

在视图的文件和控制器中,有链接,包含admin的URL。 Htaccess强制它跳过admin部分。