Kohana -特定于控制器的.htaccess


Kohana - controller specific .htaccess

我正在尝试为特定的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)。

还有另一种解决方案。再次感谢@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数据将导致它超过post_max_size,并且表单提交将失败。

@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/文件夹。
  1. .htaccessindex.php从DOCUMENT_ROOT文件夹复制到upload/文件夹。
  2. 编辑您的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]
    
  3. 编辑upload/index.php并更新所有路径($application, $modules, $system)。您可以下载整个测试包

  4. 创建上传控制器

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

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