为什么此codeigniter .htaccess文件工作

问题描述:

我有一个codeigniter网站,它有一个断开的链接结构。初始页面正常加载。我的导航栏的样子:为什么此codeigniter .htaccess文件工作

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

这似乎通过转向固定的目录结构(我以为):

<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文件在本地测试它:

http://localhost/projectname/basecontroller/contact 

到:

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

,我看它更紧密地我会想到它会造成:

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

这不应该工作,但它的工作!有人可以解释这个吗?

+0

'.htaccess'从当前目录运行。如果你的项目位于'/ projectname'中,那么'.htaccess'规则将假设这个文件夹为root。重写对我来说似乎完全合乎逻辑。什么让你困惑? – kba

+0

“.htaccess规则将应用假定此文件夹为根”。我认为这是一个重要的点,我没有意识到的东西。如果你输入这个答案,我会接受它。 - Bill – user61629

.htaccess来自当前目录。如果您的项目位于/projectname,则假定此文件夹为root,则应用.htaccess规则。

这意味着,服务器不知道服务器的整个目录层次结构。如果您将.htaccess放置在/dir1中,而不是的效果与将其放置在/dir2中的效果相同,只是将其应用于相应的目录。

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

没有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'] = ''; 

让我知道如果这个回答你的问题。

你的情况

,因为您使用本地主机,把它设置的方式,重写规则更改为

重写规则。 /projectname/index.php [L]

+0

感谢您的详细解答。这是有用的信息。 – user61629