Kohana:从url中完全删除index.php(不重复发行)

时间:2012-07-02 16:18:01

标签: kohana

=====澄清=====

请注意,有一百个与此类似的帖子的答案,但人们只涉及问题的一部分,而不是我在这里问的真实问题。

=====

我正在使用Kohana 3.2,我想从网址中完全删除index.php。例如,我想访问控制器foo,操作栏。

通常,正确设置bootstrap和htaccess后,我可以像这样访问:

  

www.domain.com/foo/bar。

但我也可以这样访问:

  

www.domain.com/index.php/foo/bar

我想让用户只能像第一种方式一样访问,而不是像第二种方式那样。

我在bootstrap.php中有这个部分:

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

我尝试取消index_file行,将其值更改为FALSE,我仍然能够双向访问foo / bar。

我认为解决方案是修改htaccess,但我尝试了一些更改,它不能正常工作。我正在使用kohana附带的原始htaccess:

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /knisu/

# 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]

任何帮助将不胜感激:)

编辑: 我找到了一个可以让它在另一篇文章中发挥作用的答案:

  # Redirect from:
  # http://localhost/index.php/welcome
  # to
  # http://localhost/welcome
  #
  RewriteCond %{REQUEST_FILENAME} -f
  RewriteRule ^index\.php/?(.*)?$ $1 [R,L]

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ ?/$1 [L]

问题是,作者说:“这有效,但问题在于存在的文件和目录,他必须为图像,css,js等提供完整的路径......我稍后会修复”

可能有助于找到最终的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我认为使用原始的htaccess更好,但有所改进。

......之后。

RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

这应该重定向“index.php /”,

# Redirect any "index.php/user/profile/" to "/user/profile/"
RewriteRule ^index.php/(.*)$ /$0 [L,R=302]

根据我的经验,通过控制器传递css / js比纯apache / nginx请求慢。