Kohana、.htaccess 和 $_GET
Posted
技术标签:
【中文标题】Kohana、.htaccess 和 $_GET【英文标题】:Kohana, .htaccess, and $_GET 【发布时间】:2010-11-19 01:45:52 【问题描述】:将我的 Kohana 项目上传到我的 Godaddy 服务器后,我注意到我的标准 .htaccess 文件不足以提供干净的 URL。经过一些指导,我最终得出了以下规则:
RewriteRule .* index.php?kohana_uri=$0 [PT,L]
这让我的 nice-URLs 再次工作,但今天我发现它可能会破坏我的内部搜索引擎,它也使用 GET 样式变量:
/search?terms=php
脚本找不到这些值。它们在我没有修改过的 RewriteRule 的开发服务器上,但不在使用 RewriteRule 的 Godaddy 服务器上。
我是否正确地假设该规则破坏了任何脚本从 $_GET 读取的能力,如果是,我该如何解决这个问题?
【问题讨论】:
【参考方案1】:也许在你的重写器中使用 QSA,像这样:
RewriteRule .* index.php?kohana_uri=$0 [PT,QSA,L]
见manual of mod_rewrite(引用):
'qsappend|QSA'(查询字符串追加)
此标志强制重写引擎附加查询字符串部分 的替换字符串 现有字符串,而不是替换 它。当你想添加更多时使用它 通过重写将数据写入查询字符串 规则。
可能会有所帮助(未在您的特定情况下进行测试,但我记得前段时间曾使用过此功能,用于解决此类问题)
【讨论】:
那行得通。在我接受之前,我会等待并让其他人参与(因为我对 .htaccess 知之甚少,因此如果这是最好的解决方案)。谢谢!【参考方案2】:我认为您可以添加:RewriteCond $1 !^(search)
,或类似的变体。
【讨论】:
【参考方案3】:如果您想使用标准实践并且没有查询字符串,您只需按照这些步骤操作,它就可以像 localhost 一样工作,并且您无需更改重写规则。
转到你的godaddy账户文件管理器--> WebRoot目录--> 如果php5.ini不存在,则创建它并放置以下行:cgi.fix_pathinfo = 1
现在您需要重新启动您的 Web 进程:
1.) 登录您的客户经理。 2.) 单击虚拟主机。 3.) 在您要使用的主机帐户旁边,单击启动。 4.) 在 Stats & Monitors 部分,单击系统进程。 5.) 在左侧列表中,单击您要查看的进程或单击所有进程以一次查看所有进程。 6.) 要结束进程,请单击工具栏上相应的结束按钮。
现在您可以将 URI_PROTOCOL 用作 Auto。
【讨论】:
以上是关于Kohana、.htaccess 和 $_GET的主要内容,如果未能解决你的问题,请参考以下文章
kohana .htaccess 中的 AllowOverride ALL 是啥意思?
如何正确设置 Kohana 的 .htaccess,使 URL 中没有丑陋的“index.php/”?