我正在使用codeigniter开发一个Web应用程序,我想动态生成一个CSS和一个JS文件。
我的意思是,根据用户在网站上使用的模块,它应该包含不同的CSS和JS文件。这样的CSS:
foreach($modules as $module){
include('path/to/module/css');
}
我将这个保存在一个名为'modules'的类中,并保存在一个名为'get_css()'的函数中。所以codeigniter链接将是:http://somesite.com/modules/get_css
但我希望服务器认为这是一个css文件,我也希望它不在我的应用程序中(即:应用程序/控制器),因为这可能是一个安全威胁。而是在根目录中。
我想我必须用htaccess做一些事情,也许还要创建另一个从该页面获取内容的文件?我实际上根本不知道如何做,和/或如果这是正确的方法。
谢谢你的帮助。
答案 0 :(得分:3)
您可以让get_css()方法检索CSS文件的内容,将它们合并在一起,然后将缓存的 CSS文件输出到磁盘。使用哈希来命名文件会很有帮助,因此您只需为每个独特的模块组合生成合并的CSS文件。因此,您要合并所有文件的内容并将其命名为:
$output_filename = md5( $module_a_name . $module_b_name ... ) . '.css' ;
if (! file_exists( $output_filename ) {
//generate merged CSS file
}
// Call back to your template layer to include $output_file in the page header
通过检查服务器上是否已存在该文件,可以防止重新生成文件,然后只需在模板中输出一个指向结果文件的样式。不需要.htaccess更改,只需让文件以与其他静态内容相同的方式提供服务。
我绝不是安全专家,但只要PHP配置为编写这些文件而不是非可执行目录,并且您不使用用户输入来获取源CSS文件就应该没问题。更新源CSS文件时,还需要清除缓存的CSS文件。