为什么此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
这不应该工作,但它的工作!有人可以解释这个吗?
.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]
感谢您的详细解答。这是有用的信息。 – user61629
'.htaccess'从当前目录运行。如果你的项目位于'/ projectname'中,那么'.htaccess'规则将假设这个文件夹为root。重写对我来说似乎完全合乎逻辑。什么让你困惑? – kba
“.htaccess规则将应用假定此文件夹为根”。我认为这是一个重要的点,我没有意识到的东西。如果你输入这个答案,我会接受它。 - Bill – user61629