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)。
任何帮助将不胜感激。
【问题讨论】:
最好尝试Location
或LocationMatch
而不是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_filesize
和post_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/
文件夹。
将 .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)。
您可以下载整个测试包
创建上传控制器。
此外,您可以将 index.php 拆分为两部分(在定义路径后剪切),这样您就不会复制整个文件。
这样的设置对我来说效果很好,您可以从这里下载我的测试应用程序:http://d.pr/ioYk
【讨论】:
是的...得到了这个。但是当我尝试在这一行加载 core.php kohana 文件时出现 HTTP 500 错误:需要 SYSPATH.'classes/kohana/core'.EXT; 好吧,那么问题与此设置无关。必须是应用程序内部的东西。以上是关于Kohana - 特定于控制器的 .htaccess的主要内容,如果未能解决你的问题,请参考以下文章