我正在使用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.3
到Ubuntu 13.x
版本5.5
的升级版本。 我使用了很多在PHP 5.3
和PHP 5.4
中工作的代码,但在PHP 5.5
中有时会中断,因为代码库中的重大更改会导致代码中断,如果不保留在非折旧函数之上。
我会尝试像这样的:
RewriteRule ^(?!index)(.*)$ index.php?/myvariable=$1 [L]
如果您知道脚本在localhost/controllername
对controllername
所期望的GET变量,则在规则myvariable
替换myvariable
变量名称。