如何正确设置 Kohana 的 .htaccess,使 URL 中没有丑陋的“index.php/”?

Posted

技术标签:

【中文标题】如何正确设置 Kohana 的 .htaccess,使 URL 中没有丑陋的“index.php/”?【英文标题】:How to set up .htaccess for Kohana correctly, so that there is no ugly "index.php/" in the URL? 【发布时间】:2010-11-01 06:33:16 【问题描述】:

2 小时后,我无法正确处理它。

Kohana 安装可以直接在我的域下访问,即“http://something.org/”

我想要http://something.org/welcome/index 之类的网址,而不是http://something.org/index.php/welcomde/index

我的 .htaccess 完全搞砸了。它实际上是下载附带的标准 example.htaccess。它几乎没用。在 kohana 页面上有一个教程“如何删除 index.php”。它也真的没用,因为它甚至不会谈论如何删除它。完全混乱。

请,有人可以提供他的工作 .htaccess 用于标准 kohana 安装吗?

【问题讨论】:

【参考方案1】:

我的 htaccess 看起来像示例。

RewriteEngine On

RewriteBase /

RewriteRule ^(application|modules|system) - [F,L]

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d

RewriteRule .* index.php/$0 [PT,L]

但您还必须将config.php 文件更改为:

$config['index_page'] = '';

【讨论】:

- [F,L] 和 [PT,L] 的东西在做什么? 查看 apache 手册:httpd.apache.org/docs/2.2/rewrite/rewrite_flags.html "F|forbidden 使用 [F] 标志会导致 Apache 向客户端返回 403 Forbidden 状态码。" "L|last [L] 标志会导致mod_rewrite 停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理进一步的规则。 "PT|passthrough RewriteRule 中的目标(或替换字符串)默认为文件路径。" 我在 application/config/config.php 中将 index_page 设置为 '',并使用完全相同的 .htaccess。在我的 URL 中删除 index.php/ 时,我仍然收到此消息:“未指定输入文件”......非常奇怪 我不太确定,但你可以试试 kohana 论坛上的这个帖子。 forum.kohanaphp.com/… 这就是解决方案!我有一个石头旧服务器;)【参考方案2】:

这是我们现在的 .htaccess 文件,它似乎正在工作。

RewriteEngine On

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

请注意,我们的应用程序、系统和模块目录都在 Web 根目录之外。

【讨论】:

【参考方案3】:

在某些主机上,我认为特别是在 CGI 模式下运行 PHP 时,你必须更改

RewriteRule ^(.*)$ index.php/$1 [L]

RewriteRule ^(.*)$ index.php?/$1 [L]

在您的 htaccess 中。所以基本上你可以使用the kohana recommended setup,只需将index.php/$1替换为index.php?/$1

【讨论】:

它不起作用。两个都试过了。 config.php 有那个 index_page = ''。如果我将 index.php/foo 放在 URL 中,我仍然只能使用工作控制器:/ Hrm,“未指定输入文件”是添加问号通常可以修复的确切错误。澄清一下,此修复仅适用于 htaccess,config.php 文件中没有任何内容。【参考方案4】:

试试这个 mod_rewrite 规则:

RewriteEngine on
RewriteCond %REQUEST_FILENAME !-f
RewriteRule !^index\.php index.php%REQUEST_URI [L]

【讨论】:

那是什么意思?你有没有读过kohanaphp.com/tutorials/remove_index 出现“输入错误”信息(白页)。是的,我做到了。尽管标题承诺了,但他们没有谈论如何删除它。他们在文章中完全忘记了它。真的很可惜。【参考方案5】:

对于那些在 OSX 上使用默认 .htaccess 获得“禁止错误”403 的用户,请务必将其添加为 .htaccess 中的第一行

选项 +FollowSymLinks

【讨论】:

【参考方案6】:

Kohana 3.2 有不同的约定。如果您查看 Kohana_URL,您会发现以下函数签名:

public static function site($uri = '', $protocol = NULL, $index = TRUE)

其中 $index 默认为 TRUE。通过传递 $index FALSE 您将删除 index.php 引用。

【讨论】:

以上是关于如何正确设置 Kohana 的 .htaccess,使 URL 中没有丑陋的“index.php/”?的主要内容,如果未能解决你的问题,请参考以下文章

Kohana、.htaccess 和 $_GET

kohana .htaccess 中的 AllowOverride ALL 是啥意思?

如何在 Kohana 中使用 ORM 连接表

Kohana 中的全局视图变量

如何将 Wordpress 集成到 Kohana 3 中

Kohana ORM - 我该怎么做?