所以我是这方面的新手 - 我刚开始使用CodeIgniter进行开发,我正在尝试集成javascript库。但是,我设置了.htaccess,以便所有请求都在其前面加上/index.php/,这使得包含文件变得很困难。对于CSS,我只是使用php include来解决这个问题,让它内联,无论如何都要快。但这似乎是javascript库的一个坏主意。
有什么想法?我应该只创建一个index.php /文件夹并将其粘贴在那里吗?
谢谢!
马拉
答案 0 :(得分:8)
您可以通过向其添加条件来避免重写规则:
RewriteCond $1 !^(index\.php|images|scripts|styles|robots\.txt)
然后,您可以将所有脚本,图像等放在docroot中。
有关详细信息,请参阅Apache Rewrite docs。
答案 1 :(得分:1)
我实际上使用资源控制器来引入所有外部文件:
class Resources extends Controller
{
public function __construct()
{
parent::__construct();
}
public function javascript()
{
$arr = func_get_args();
if( sizeof( $arr ) == 0 )
{
show_404();
return;
}
if( is_numeric( $arr[ sizeof( $arr ) - 1 ] ) )
{
array_pop( $arr );
}
$name = implode( "/", $arr );
$this->load->view( "javascript", array( "importscript" => $name ) );
}
public function css()
{
$arr = func_get_args();
if( sizeof( $arr ) == 0 )
{
show_404();
return;
}
if( is_numeric( $arr[ sizeof( $arr ) - 1 ] ) )
{
array_pop( $arr );
}
$name = implode( "/", $arr );
$this->load->view( "css", array( "importscript" => $name ) );
}
public function image()
{
$arr = func_get_args();
if( sizeof( $arr ) == 0 )
{
show_404();
return;
}
if( is_numeric( $arr[ sizeof( $arr ) - 1 ] ) )
{
array_pop( $arr );
// if the last item is a number, that means it was
// automatically generated to prevent caching
}
$name = implode( "/", $arr );
$this->load->view( "images", array( "importscript" => $name ) );
}
}
不同的观点都是这样的:
$import = dirname( __FILE__ ) . "/javascript/$importscript";
if( !showjs( $import ) && is_dir( $import ) )
{
if( !showjs( "$import/$importscript" ) )
{
show_404();
}
}
function showjs( $imp )
{
if( is_file( "$imp.js" ) )
{
header('Content-type: application/javascript');
echo "/*----- Imported into PHP so JavaScript can all be dynamically declared -----*/\n\n";
echo file_get_contents( "$imp.js" );
return true;
}
elseif( is_file( "$imp.php" ) )
{
header('Content-type: application/javascript');
echo "/*----- Imported into PHP so JavaScript can all be dynamically declared -----*/\n\n";
include_once( "$imp.php" );
return true;
}
return false;
}
如您所见,控制器将文件名传递给视图。然后视图查看是否存在与importscript变量关联的js文件或php文件。如果有,它会设置标题然后显示文件。
答案 2 :(得分:1)
如果您使用的是mod_rewrite,只需在RewriteRule前添加RewriteCond即可。 例如:
RewriteCond %{REQUEST_URI} !\.(css|js|jpe?g|png|gif)$
RewriteRule ^([^/]+)/([^/]+)/? index.php?ctrl=$1&event=$2 [L,QSA]
答案 3 :(得分:0)
也许我很想念一些东西,但为什么不包括带有绝对网址的javascript库
<script type="text/javascript" src="/js/javascript.js"></script>
与CSS相同
<link rel="stylesheet" type="text/css" href="/css/main.css">
如果您使用/
从doc根开始,那么找到文件就不会有任何问题。