我使用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
答案 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.5
版Ubuntu 13.x
版。我使用了大量适用于PHP 5.3
和PHP 5.4
的代码,但有时在PHP 5.5
中断,因为代码库中存在重大更改,如果您不保留代码库将导致代码中断除了非折旧功能之外这样
答案 2 :(得分:0)
我会尝试类似的事情:
RewriteRule ^(?!index)(.*)$ index.php?/myvariable=$1 [L]
如果你知道脚本期望controllername
中localhost/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]