CodeIgniter base_url

时间:2018-02-16 03:57:21

标签: php css codeigniter

我有codeigniter base_url的问题。 我的base_url是$config['base_url'] = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME'])...http://test.localhost/)...但是当我执行ajax请求时,我使用<?= base_url(); ?>installer/test,响应是“不允许直接访问脚本”。

我尝试添加到base_url index.php(http://test.localhost/index.php/)并解决了这个问题,但现在当我使用base_url加载一个css时这样:&lt; ?= base_url(); ?>assets/css/installer.css css没有加载但是如果我删除index.php正确加载css,但是ajax请求响应“不允许直接访问脚本”。

显然我认为我的配置有问题,但我没有发现错误。我需要在同一base_url下加载ajax请求和css,因为代码很大,我无法更改base_url的所有实例。

4 个答案:

答案 0 :(得分:1)

问题可能在...中

  1. $_SERVER['HTTP_HOST']很少在localhost中运行,有时也适用 未能检测到主机路线。

  2. CSS样式表需要纯目录URL,它从不包含任何内容 包含'localhost/index.php'

  3. 等网址的其他文件

    尝试使用...

    1. $config['base_url'] ='http://test.localhost/';
    2. import css as =&gt; href="<?php echo base_url(); ?>assets/css/installer.css"
    3. 使用Ajax as =&gt; 'url' : '<?php echo base_url(); ?>index.php/ 您的控制器路径&#39;

答案 1 :(得分:1)

base_urlsite_url应该是这样的

base_url()  =  http://test.localhost/
site_url()  =  http://test.localhost/index.php/

如果您需要加载网址资源(如css,js,图片等),请使用base_url(),否则site_url()会更好。

这意味着在您的ajax请求中,您可以像这样设置网址

var serviceUrl = "<?php echo site_url(); ?>your_controller/your_method";
            var returnResult = $.ajax({
                                            url: serviceUrl,
                                            data: {'id': id, .....},
                                            type: 'post',
                                            dataType: 'json'
                                        });

或者您可以像这样设置网址

var serviceUrl = "<?php echo base_url(); ?>index.php/your_controller/your_method";
            var returnResult = $.ajax({
                                            url: serviceUrl,
                                            data: {'id': id, .....},
                                            type: 'post',
                                            dataType: 'json'
                                        });

这可能会帮助你......谢谢!

答案 2 :(得分:0)

我花了几个小时遇到这个问题,但是以不同的方式解决了这个问题。可以看到,我刚刚在应用程序文件夹之外创建了一个Assets文件夹。最后,我将样式表链接到页面标题部分。文件夹结构在图像下方。

enter image description here enter image description here

在执行此操作之前,您应该在控制器类方法/ __ constructor文件中或在 autoload.php 文件中包含 url 帮助文件。还要在以下文件 application / config / config.php

中更改$config['base_url'] = 'http://yoursiteurl';

如果将其包含在控制器类method / __ constructor中,则它看起来像

public function __construct()
{
    $this->load->helper('url');
}

或如果您加载自动加载文件,则看起来像

$autoload['helper'] = array('url'); 

最后,添加样式表文件。 您可以通过不同的方式链接样式表,将其包含在内部部分

-> <link rel="stylesheet" href="<?php echo base_url();?>assets/css/style.css" type="text/css" />

->或

<?php

    $main = array(
    'href'       => 'assets/css/style.css',
    'rel'        => 'stylesheet',
    'type'       => 'text/css',
    'title'      => 'main stylesheet',
    'media'      => 'all',
    'index_page' => true
    );


echo link_tag($main); ?>

->或

最终,我得到了更可靠的代码清理器概念。只需在您的 application / config / styles.php 文件夹中创建一个名为 styles.php 的配置文件。 然后在如下所示的 styles.php 文件中添加一些链接

<?php
 $config['style'] = array(
    'main' => array(
        'href'       => 'assets/css/style.css',
        'rel'        => 'stylesheet',
        'type'       => 'text/css',
        'title'      => 'main stylesheet',
        'media'      => 'all',
        'index_page' => true
    )
 );

?>

调用/将此配置添加到控制器类方法如下

$this->config->load('styles');
$data['style'] = $this->config->config['style'];

在标题模板中传递此数据如下所示。

$this->load->view('templates/header', $data);

最后添加或链接您的css文件,如下所示。

<?php echo link_tag($style['main']); ?>

答案 3 :(得分:-1)

base_url用于访问图像JS,文件和CSS,站点URL用于访问控制器的功能。base_url index.php不存在,但在{{{} 1}} site_url pres end所以定义index.php就像这样

base_url