为什么这个codeigniter .htaccess文件有效

时间:2014-03-30 02:25:04

标签: php .htaccess codeigniter

我有一个codeigniter网站,其链接结构已损坏。初始页面正常加载。我的Navbar看起来像:

<a class="brand" href="#">myproject</a>
          <div class="nav-collapse">
            <ul class="nav">
              <li class="active"><a href="#">Home</a></li>
              <li ><a href="http://localhost/projectname/basecontroller/Facts">Facts</a></li>
              <li ><a href="http://localhost/projectname/basecontroller/about">About</a></li>
              <li ><a href="http://localhost/projectname/basecontroller/contact">Contact</a></li>
              <!--<li ><a href="http://localhost/projectname/basecontroller/privacy">Privacy</a></li>-->
            </ul>
          </div><!--/.nav-collapse -->

我已使用根目录中的以下.htaccess文件在本地测试它:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|assets|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L] 

这似乎通过转动来修复目录结构(我假设):

http://localhost/projectname/basecontroller/contact

成:

http://localhost/projectname/index.php/basecontroller/contact

当我仔细观察它时,我会认为它会创造:

 http://localhost/index.php/projectname/basecontroller/contact

哪个不行,但它有效!有人可以解释一下吗?

2 个答案:

答案 0 :(得分:1)

没有codeigniter htaccess这样的东西。 .htaccess是它自己的东西,它与codeigniter完全分开。为了让codeigniter在没有url中的index.php的情况下工作,使用wordpress用于其htaccess文件的内容,对于codeigniter来说也是如此。这是一份副本:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

还要确保删除application / config / config.php中的index.php,如下所示:

$config['index_page'] = '';

如果这回答了你的问题,请告诉我。

在您的情况下,由于您使用localhost及其设置方式,请将重写规则更改为

RewriteRule。 /projectname/index.php [L]

答案 1 :(得分:1)

.htaccess从当前目录开始工作。如果您的项目位于/projectname,那么假设此文件夹为root用户,将应用.htaccess规则。

这意味着,服务器无视服务器的所有目录层次结构。如果您将.htaccess放在/dir1中,那么的效果与放置在/dir2中的效果相同,但只会应用于相应的。目录

如果您希望.htaccess从服务器的根目录起作用,则必须将该文件放在实际的服务器根目录中。