Codeigniter链接在localhost中断开

时间:2013-02-22 15:26:44

标签: php codeigniter hyperlink broken-links

我正在为公司更新项目。我将文件传输到我的localhost。所以项目在“localhost / project /”中。当我在浏览器中打开网站时,所有链接都指向“localhost / filename”,目录从项目文件夹向上一级。我做了一些研究,并注意到人们建议改变htaccess,但仍然无法得到正确的结果。并建议请告诉我。如果您需要我的任何东西,请询问。谢谢!

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

开始:

http://localhost/projectfolder/

<a href="/" title="">Home</a>

导致:

http://localhost/

Config.php:

$config['base_url'] = 'http://localhost/projectfolder/';
$config['index_page'] = "";
$config['uri_protocol'] = "AUTO";
$config['url_suffix'] = ".html";
$config['language'] = "english";
$config['charset'] = "UTF-8";
$config['enable_hooks'] = FALSE;
$config['subclass_prefix'] = 'MY_';
$config['permitted_uri_chars'] = 'a-z & + 0-9~%.:_\-,\'?';
$config['enable_query_strings'] = FALSE;
$config['controller_trigger']   = 'c';
$config['function_trigger']     = 'm';
$config['log_threshold'] = 0;
$config['log_path'] = '';
$config['log_date_format'] = 'Y-m-d H:i:s';
$config['cache_path'] = '';
$config['encryption_key'] = "";
$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;
$config['cookie_prefix']    = "";
$config['cookie_domain']    = "";
$config['cookie_path']      = "/";
$config['global_xss_filtering'] = FALSE;
$config['compress_output'] = FALSE;
$config['time_reference'] = 'local';
$config['rewrite_short_tags'] = FALSE;
$config['proxy_ips'] = '';

4 个答案:

答案 0 :(得分:1)

您可能需要打开config.php文件并将base_url值更改为localhost或localhost:8080(或您的localhost使用的任何端口)。

修改

问题是所有主播代码都使用主页的/等硬编码值。

在服务器上,这样可以正常运行,因为您的域名类似于example.com,所以转到/,您就是说转到example.com/

在codeigniter中创建链接的正确方法是使用anchor()帮助程序,或者在项目中手动创建锚标记,但使用base_url()site_url() HREF。

如何修复指向主页的链接的示例如下:

<a href="<?php echo base_url(); ?>/">blah</a>

它可能适用于你的href值前缀为base_url的所有链接,但它取决于链接中的值。

这是codeigniter辅助方法的链接 - http://ellislab.com/codeigniter/user-guide/helpers/url_helper.html

最好看一下codeigniter手册,因为它非常好。

答案 1 :(得分:0)

更改以下行

RewriteRule ^(.*)$ index.php/$1 [L]

to

RewriteRule ^(.*)$ /project/index.php/$1 [L]

希望它能奏效。

答案 2 :(得分:0)

尝试这个简单的.htaccess它似乎对我有用:你的错过了ReWriteBase


<IfModule mod_rewrite.c>

    RewriteEngine on
    RewriteBase /projectfolder/

    # If the start of the URL doesn't match one of these...
    RewriteCond $1 !^(index\.php|robots\.txt|uploads|css|images|js)

    # Route through index.php
    RewriteRule ^(.*)$ index.php/$1 [L]

</IfModule>

如果这对您有用,我想您可以从修复ReWriteBase开始。

请注意,当您将此htaccess文件上传到主机并且默认base_url更改为类似www.example.com时,您必须将ReWriteBase更改为/

并且不要忘记尽可能在链接中使用<?php echo base_url() ?>

我希望有所帮助。

答案 3 :(得分:0)

在配置文件中使用它:

$config['base_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/Your project folder  name';
$config['index_page'] = '';
$config['uri_protocol'] = 'AUTO';

在.htaccess

中使用它
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

并使用以下命令启用重写模式

a2enmod rewrite

并编辑文件/ etc / apache2 / sites-enabled / 000-default

change all the AllowOverride None to AllowOverride All.