Kohana 3:隐藏部分 f "=10="

Kohana 3: Hide part of url

我在 Kohana 3 中隐藏部分 url 时遇到问题。

admin 子文件夹中存储了控制器。 这些控制器为站点的管理面板供电。 所以当我输入 :

http://mysite.xyz/admin

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

所以现在当我输入时:

http://admin.mysite.xyz/admin

它工作正常。 但我想隐藏 url 的 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/(.*)$ / [R=301,L,NE]

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

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

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

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

不行。它给出 404 错误。

有人可以帮忙吗?

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


编辑

bootstrap.php 路线:

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',
));

使用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/(.+)$  [L,NC,R]

我会建议这个解决方案,注释掉 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

好的。我通过 .htaccess:

中的 hack 解决了它
RewriteRule ^admin/(.+)$  [L,NC,R]

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