CodeIgniter删除index.php不起作用

时间:2014-06-23 01:12:06

标签: php apache .htaccess codeigniter mod-rewrite

我使用Ubuntu 13进行本地codeigniter网站的以下设置。

Apache/2.4.6 (Ubuntu)
5.5.3-1ubuntu2.2 
'CI_VERSION', '2.1.2'

如果没有index.php,网址将不再有效。他们曾经工作,但在从Ubuntu 12.x升级到13.x并在过去一年中进行了一些apache更新后,localhost网站无法正常运行。

如果我去localhost/index.php/controllername/它可以工作,但如果我去localhost / controllername /它没有。

mod_rewrite已启用。

CodeIgniter配置有:

$config['index_page'] = '';
$config['uri_protocol'] = 'AUTO'; // tried all available options here and 

没有任何效果

在我所拥有的域的.conf文件中:

<Directory />
  Options -Multiviews +FollowSymLinks
  AllowOverride All
</Directory>

此处.htaccess文件注释的行是我尝试过但没有效果的行。

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
#  RewriteCond $1 !^(index\.php|robots\.txt)
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?/$1 [L]
#  RewriteRule .* index.php/$0 [PT,L]
#    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
</IfModule>

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule>

我用谷歌搜索并阅读了我能找到的所有内容并尝试了我能找到的所有内容,包括Stack Overflow上的几篇帖子,包括“可能已经有你答案的问题”中的内容。但似乎仍然没有任何效果。但就像我说的那样,这在过去是有效的,但只有在操作系统和Apache的多次更新后我才首先注意到它停止工作。

我将在未来的项目中离开CodeIgniter,但这些项目已经存在。对于可能出现的问题感到困惑。

解决方案:

结果证明它根本不是一个codeigniter问题。这是一个apache问题,但不是重写规则。 在我的apache2.conf中,我不得不改变/ var / www /

的块

要求所有被授予似乎已经完成了这个伎俩。

        DirectoryIndex index.php index.html         选项索引FollowSymLinks         AllowOverride All         要求全部授予

为了好的措施,我也在这里做了改变:         选项FollowSymLinks         AllowOverride All         要求全部授予

在askubuntu上发现 https://askubuntu.com/questions/421233/enabling-htaccess-file-to-rewrite-path-not-working

4 个答案:

答案 0 :(得分:1)

将以下代码复制到根文件夹中的.htaccess

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

Options All -Indexes

我可以在CodeIgniter中删除index.php。

答案 1 :(得分:0)

看起来CodeIgniter似乎没有默认.htaccess,所以不清楚它来自哪里。但出于调试目的,我建议您执行以下操作。首先,这是您.htaccess全部清理过的:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

现在用这个替换你的index.php。它只是转储通过$_GET传递的.htaccess值,如下所示:

echo '<pre>';
print_r($_GET);
echo '</pre>';

现在,在您的.htaccess中加载相关网站/应用/项目的索引页面。输出应该是这样的:

Array
(
    [/controllername/here/] => 
)

这似乎是正确的。但同样,你会比我们更清楚。

这样做的目的是评估问题是否在Apache向CodeIgniter设置传递正确的$_GET值,这是一个问题。或者问题是否在您的CodeIgniter控制器逻辑本身内。

我的直觉告诉我问题出现在您的代码库中的CodeIgniter逻辑中,因为从Ubuntu 12.x升级到Ubuntu 13.x包括版本PHP的升级版5.3 Ubuntu 12.x中的5.5Ubuntu 13.x版。我使用了大量适用于PHP 5.3PHP 5.4的代码,但有时在PHP 5.5中断,因为代码库中存在重大更改,如果您不保留代码库将导致代码中断除了非折旧功能之外这样

答案 2 :(得分:0)

我会尝试类似的事情:

RewriteRule ^(?!index)(.*)$ index.php?/myvariable=$1 [L]

如果你知道脚本期望controllernamelocalhost/controllername的GET变量,那么在规则中用该变量名替换myvariable

答案 3 :(得分:0)

将.htaccess文件放置在项目文件夹中,如下所示:

htdocs / your_project / .htaccess

尝试使用.htaccess的新代码:

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