我在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',
));
答案 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',
));
答案 2 :(得分:0)
确定。我通过.htaccess中的黑客解决了它:
RewriteRule ^admin/(.+)$ $1 [L,NC,R]
在视图的文件和控制器中,有链接,包含admin
的URL。 Htaccess强制它跳过admin
部分。