我正在尝试为特定的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_filesize
和post_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]
- 现在在你的
- 将
.htaccess
和index.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)。您可以下载整个测试包创建上传控制器
public_html/
中创建一个upload/
文件夹。另外,您可以将index.php分成两部分(在定义路径后切割),这样您就不会复制整个文件。
这样的设置对我来说工作得很好,你可以从这里下载我的测试应用程序:http://d.pr/ioYk