Kohana - 特定于控制器的 .htaccess

Posted

技术标签:

【中文标题】Kohana - 特定于控制器的 .htaccess【英文标题】:Kohana - controller specific .htaccess 【发布时间】:2011-09-30 14:03:57 【问题描述】:

我正在尝试为特定的 Kohana 控制器设置一些 htaccess 规则。基本上它与表单上传有关。大多数网站都不想允许大容量上传,所以 php.ini 将保留推荐的设置。

但是,有一个地方需要上传大文件。我有以下选项可以添加到我的根 .htaccess 中:

php_value max_input_time 60000
php_value post_max_size "1GB"
php_value upload_max_filesize "1GB"
php_value memory_limit "128MB"

但我不知道该怎么做才能使其仅适用于一个控制器(即http://www.mysite.com/massiveupload)。

任何帮助将不胜感激。

【问题讨论】:

最好尝试LocationLocationMatch 而不是Files(它们使用URL,而文件使用真实文件名)。另一个想法是实际上有这样的文件夹名称并将这些规则放在 .htaccess 文件中,但仍然确保这样的 URL 将被视为控制器而不是普通文件夹。 【参考方案1】:

还有另一种解决方案。再次感谢@LazyOne 的提示。这个更简洁,但它需要直接更新 Apache 配置(因此您不能将其部署在共享主机上)。

您所要做的就是将其添加到您的 httpd.conf 或 vhosts.conf(在 <Directory><VirtualHost> 中,根据 Apache Docs)。

<LocationMatch /massiveupload>
    php_flag max_input_time 60000
    php_value post_max_size 1024M
    php_value upload_max_filesize 1024M
    php_value memory_limit 128M
</LocationMatch>

重启你的服务器,它应该可以正常工作了!

注意,尽管 LocationMatch 将 /massiveupload 解析为正则表达式,但我们不能使用 ^/massiveupload(注意 ^ 字符匹配字符串的开头)。这是因为如果您使用 ModRewrite(它会在内部更改最终请求 url),它将失败。

请注意,您不应该使upload_max_filesizepost_max_size 的大小完全相同,因为如果您上传的文件刚刚达到upload_max_filesize 限制,任何其他发布数据都会导致它超过post_max_size表单提交会失败。

【讨论】:

是一种享受...更好的解决方案。【参考方案2】:

@LazyOne 的建议实际上很容易实现。

考虑这个文件夹结构(只列出最重要的文件/文件夹):

application/
    bootstrap.php
lib/
    kohana-3.0.8/
        modules/
        system/
public_html/              <----- this is your DOCUMENT_ROOT
    .htaccess
    index.php

考虑到您使用的是默认 Kohana 的 .htaccess:

RewriteEngine On
RewriteBase /

<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule .* index.php/$0 [PT]
    现在在您的public_html/ 中创建一个upload/ 文件夹。 将 .htaccessindex.php 从 DOCUMENT_ROOT 复制到 upload/ 文件夹。

    编辑您的upload/.htaccess:(仅显示新更改的行)

    php_flag max_input_time 86400
    php_value post_max_size 1536M
    php_value upload_max_filesize 1024M
    
    RewriteEngine On
    RewriteBase /upload/
    ...
    RewriteRule .* index.php/upload/$0 [PT]
    

    编辑您的upload/index.php 并更新所有路径($application、$modules、$system)。 您可以下载整个测试包

    创建上传控制器。

此外,您可以将 index.php 拆分为两部分(在定义路径后剪切),这样您就不会复制整个文件。

这样的设置对我来说效果很好,您可以从这里下载我的测试应用程序:http://d.pr/ioYk

【讨论】:

是的...得到了这个。但是当我尝试在这一行加载 core.php kohana 文件时出现 HTTP 500 错误:需要 SYSPATH.'classes/kohana/core'.EXT; 好吧,那么问题与此设置无关。必须是应用程序内部的东西。

以上是关于Kohana - 特定于控制器的 .htaccess的主要内容,如果未能解决你的问题,请参考以下文章

许多 UIButtons 的共享操作,获取特定于按钮的字符串

流星加载脚本,特定于页面的 CSS

使用 Kohana 避免会话劫持

如何使用特定于州的代理?

为 Mac 生成特定于机器的密钥

无法生成特定于应用程序的共享密钥