=====澄清=====
请注意,有一百个与此类似的帖子的答案,但人们只涉及问题的一部分,而不是我在这里问的真实问题。
=====
我正在使用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等提供完整的路径......我稍后会修复”
可能有助于找到最终的解决方案吗?
答案 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请求慢。