【问题标题】:Kohana 3: Hide part of urlKohana 3:隐藏部分网址
【发布时间】:2016-02-17 11:10:30
【问题描述】:

我在 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/(.*)$ /$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::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',
));

【问题讨论】:

  • 更新您的默认路由以使用管理控制器。
  • 我该怎么做?我不是 kohana 程序员,也没有创建那个网站。我应该附上一些代码吗?
  • 检查 bootstrap.php,如果你可以通过 Route::set('default' 代码在这里我可以提供帮助。
  • 将默认路由移到管理员路由之前..
  • 您也可以阅读此页面以供参考。 kohanaframework.org/3.3/guide/kohana/routing

标签: .htaccess redirect kohana kohana-3


【解决方案1】:

使用 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]

【讨论】:

  • 我收到错误:ReflectionException [ -1 ]: Class controller_admin does not exist。在 bootstrap.php 我有一个规则:Route::set('admin', 'admin(/&lt;controller&gt;(,&lt;action&gt;(,&lt;id&gt;)(,&lt;id2&gt;)(,&lt;id3&gt;)))') -&gt;defaults(array( 'directory' =&gt; 'admin', 'controller' =&gt; 'home', 'action' =&gt; 'index', ));
【解决方案2】:

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

【讨论】:

  • 现在,当我输入 admin.site.xyz 时,重定向到 admin.site.xyz//admin/login/(其中登录是控制器)并给出 kohana 错误:无法找到与 URI 匹配的路由:admin/logowanie。跨度>
  • 我想问题是,因为控制器和视图有链接(重定向、链接、表单操作重新加载目标)到方案中的 url:base_url/admin/controller/model。例如,经过上述更改后,我手动输入 admin.site.xyz/login page load ok,但是当我单击提交按钮时,仍然存在相同的错误。
  • 这取决于表单操作的 URL 是如何生成的。在 Bootstrap.php 你可以更新 Kohana::init (array ('base_url' => '/'));如果 URL 不是硬编码的,它会有所帮助
【解决方案3】:

好的。我通过 .htaccess 中的 hack 解决了它:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多