CodeIgniter删除index.php不工作

我正在使用Ubuntu 13以下设置为本地代码的网站。

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

如果没有index.php ,url将不再工作。 他们曾经工作,但过去一年从Ubuntu 12.x升级到13.x和几个Apache更新后, localhost网站不再正常工作。

如果我去localhost/index.php/controllername/它的作品,但如果我去本地主机/控制器名称/它不。

mod_rewrite已启用。

CodeIgniterconfiguration有:

 $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> 

我谷歌search了一切,我可以find并尝试了一切,我可以find包括堆栈溢出几个职位,包括在“问题,可能已经有你的答案”。仍然没有任何工作。 但正如我所说,这是过去的工作,但只有多次更新操作系统和Apache后,我第一次注意到它停止工作。

我将从未来的项目中移出CodeIgniter,但这些项目已经存在。 可能是什么问题受到了挫折。

解:

事实certificate,这不是一个代码问题。 这是一个Apache的问题,但没有重写规则。 在我的apache2.conf中,我不得不改变/ var / www /

要求所有授予似乎已经做了伎俩。

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

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

findaskubuntu https://askubuntu.com/questions/421233/enabling-htaccess-file-to-rewrite-path-not-working

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

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

这对我在CodeIgniter中删除index.php工作正常。

CodeIgniter似乎没有默认的.htaccess ,所以不清楚它来自哪里。 但为了调试的目的,我建议你做下面的事情。 首先,这里是你的.htaccess全部清理完毕:

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

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

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

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

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

这似乎是正确的。 但是,再一次,你会比我们更清楚。

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

我的直觉告诉我,问题出在你的代码库中的CodeIgniter逻辑上,因为从Ubuntu 12.x升级到Ubuntu 13.x包括从Ubuntu 12.x版本5.3Ubuntu 13.x版本5.5的升级版本。 我使用了很多在PHP 5.3PHP 5.4中工作的代码,但在PHP 5.5中有时会中断,因为代码库中的重大更改会导致代码中断,如果不保留在非折旧函数之上。

我会尝试像这样的:

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

如果您知道脚本在localhost/controllernamecontrollername所期望的GET变量,则在规则myvariable替换myvariable变量名称。