当我在Kohana 3中使用form::open
时,我得到了这个
<form action="/my-site/index.php/bla" method="post" accept-charset="utf-8">
我的网站上没有任何地方依赖index.php。我觉得它看起来很难看。有没有一种简单的方法可以从中删除index.php。
显然我知道我可以做str_replace()
,但我认为可能有更优雅的方式?
答案 0 :(得分:7)
是一个初始化调用:
Kohana::init(array(
'base_url' => '/',
'index_file' => FALSE // This removes the index.php from urls
));
这将从所有生成的URL中删除index.php。无需重载/编辑任何Kohana课程。
请注意,您必须使用.htaccess文件
答案 1 :(得分:6)
Kohana(以及CodeIgniter和大多数其他框架)依赖于Front-Controller Pattern(index.php
),所以除非你深入攻击它,否则我看不出你不需要依赖它。
快速查看form::open()
来源:
public static function open($action = NULL, array $attributes = NULL)
{
if ($action === NULL)
{
// Use the current URI
$action = Request::instance()->uri;
}
if ($action === '')
{
// Use only the base URI
$action = Kohana::$base_url;
}
elseif (strpos($action, '://') === FALSE)
{
// Make the URI absolute
$action = URL::site($action);
}
// ...
}
如果不指定绝对URL,我认为不可能。如果你不介意的话,可能会成为一个解决方案:
form::open('http://domain.com/my-site/bla');
否则,您最好的方法是str_replace()
或使用应用程序助手覆盖它。
如果您修改url
帮助程序(/system/classes/kohana/url.php
)并从中更改第71行:
return URL::base(TRUE, $protocol).$path.$query.$fragment;
对此:
return URL::base(FALSE, $protocol).$path.$query.$fragment;
所有index.php
次出现都应该消失。
我不确定这是否有效,但在application/bootstrap.php
更改此内容:
Kohana::init(array('base_url' => '/kohana/'));
对此:
Kohana::init(array('base_url' => '/kohana/', 'index_file' => ''));
答案 2 :(得分:1)
除了几分钟,我没有和Kohana 3一起玩过。
在Kohana 2中,有一个配置设置,您可以设置为空字符串
$config['index_page'] = '';
我的一位同事在Kohana 3开发团队工作,所以如果你明天没有一个可靠的答案,我可以问他。快速查看form.php表明,action的NULL值将从Request :: instance() - &gt; uri()中获取值,而后者将从Route类中获取其值。你可以通过回溯路由实例来找到答案,看看在哪里设置了什么。否则,就像我提到的那样,明天我会问我的同事。
答案 3 :(得分:0)
除了Casper的响应之外,这里还有默认的KO3 .htaccess(从example.htaccess重命名)文件,可以重写URL。
# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /kohana/
# 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]