在CodeIgniter中禁用url处的index.php

时间:2013-10-05 14:44:42

标签: php .htaccess codeigniter url-routing

使用codeigniter时,我遇到了一些困难。这是关于URL中的index.php文件。

CodeIgniter使用index.php为其所有页面提供服务。所以,我们的网址应如下所示:

http://www.example.com/codeigniter/index.php/something

我想通过编辑index.php文件并创建.htaccess文件来从网址中删除config.php。从

更改配置后
$config['index_page'] = 'index.php';

$config['index_page'] = '';

我可以在没有index.php的情况下运行我的项目,就像这样:

http://www.example.com/codeigniter/something

现在,该链接正在运行 - 但它也在使用index.php片段。我还可以看到具有http://www.example.com/codeigniter/index.php/something地址的组件。

我的.htaccess文件是:

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

现在,我想让我的网站仅在我的链接中没有index.php的情况下可用。我不希望此站点与链接中的index.php文件一起运行。我希望http://www.example.com/codeigniter/something能够完美运行并且http://www.example.com/codeigniter/index.php/something不能运行。我怎么能这样做?

4 个答案:

答案 0 :(得分:1)

您可以尝试在.htaccess文件中添加以下内容

RewriteCond %{THE_REQUEST} codeigniter\/index\.php
RewriteRule codeigniter\/index\.php -[F]

基本上,如果请求包含codeigniter / index.php,则此规则会返回一个禁止的响应

答案 1 :(得分:1)

尝试这个

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]

将代码放在根文件夹htaccess中。如果您遇到任何问题请告诉我

答案 2 :(得分:0)

将此规则添加到您已有的规则之上:

RewriteCond %{THE_REQUEST} \ /codeigniter/index\.php([^\?\ ]*)
RewriteRule ^ /codeignighter/%1 [L,R=301]

它会将包含index.php的请求重定向到没有它的网址。

答案 3 :(得分:0)

你应该加一个?在index.php之后,所以它适用于所有主机。这是我的htaccess

RewriteEngine On
#RewriteBase /   maybe you don't need it, depends on the hosting
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|robots\.txt|humans\.txt|license\.txt|sitemap\.xml|assets)
RewriteRule ^(.*)$ index.php?/$1 [L]