我安装了一个干净的Apache2(加上PHP和MySQL)服务器,并在apache配置中启用了mod_rewrite
。
我添加了.htaccess
文件,以便从URL中删除index.php,如CodeIgniter wiki中所述。
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
我将此文件放在网站的根目录中。
当我尝试访问网址mydomain.local/index.php/welcome
时,我会获得CodeIgniter的默认页面。但是当我尝试通过mydomain.local/welcome
访问同一页面时,我得到了404页面。
如何检查整个重写规则是否有效?为什么它不起作用?
答案 0 :(得分:9)
假设您的配置( /application/config/config.php )已禁用index_page:
$config['index_page'] = '';
你的Apache DocumentRoot 是: / srv / www /
创建与 / application / 目录相同级别的 .htaccess 文件,其中包含以下内容:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
您应该注意到 RewriteBase 指向 DocumentRoot (/)。 如果 index.php 位于另一个目录中,则应相应更改 RewriteBase 。
对于像:
这样的目录结构/srv/www/application/
/srv/www/system/
/srv/www/index.php
/srv/www/.htaccess
RewriteBase 应为: /
对于像:
这样的目录结构/srv/www/codeigniter/application/
/srv/www/codeigniter/system/
/srv/www/codeigniter/index.php
/srv/www/codeigniter/.htaccess
RewriteBase 应为: / codeigniter /
等等,你得到了照片。
答案 1 :(得分:9)
我找到了解决方案。 Apache配置不允许运行htaccess文件。所以我必须将目录上的AllowOverride
标志设置为AllowOverride ALL
。
感谢您的帮助!
答案 2 :(得分:1)
默认.htaccess(来自ci用户指南http://ellislab.com/codeigniter/user-guide/general/urls.html)
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
我在代码上面混淆了一会儿,但我有这样的代码:
RewriteEngine on
RewriteCond $1 !^(index\.php|robots\.txt|.*\.css|.*\.js|.*\.png)
RewriteRule ^(.*)$ ./index.php/$1 [L]
在localhost上你必须添加&#34; ./"在index.php(第3行)前面,因为在我的情况下,ci目录没有放在root上。我认为&#34; ./" 意味着它应该是相对路径。
对于附加条件".*\.css|.*\.js|.*\.png"
,这意味着apache不应该使用扩展名css,js和png重写文件。
答案 3 :(得分:0)
您需要从配置文件
中的索引页面中删除index.php<强> /application/config/config.php 强>
$config['index_page'] = '';
试试这个.htaccess的东西,这就是我正在使用的东西:
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
您可能还需要在apache配置中启用mod_rewite
。
答案 4 :(得分:0)
尝试更改uri_protocol配置设置。此外,某些服务器需要在htaccess文件中进行此修改:
RewriteRule ^(.*)$ /index.php/?$1 [L]
最后一次斜线后的问号。试试吧。
还要确保你的mod_rewrite已开启。
答案 5 :(得分:0)
如果您遇到500 Internal Server Error
。首先要查找的是apache error.log
文件。对我来说,错误与命令AddOutputFilterByType
有关。
无效命令'AddOutputFilterByType',可能拼写错误或已定义 由未包含在服务器配置中的模块。
对于我的配置,apache配置中未启用两个模块,而.htaccess
中正在使用相应的命令。因此,一旦我启用filter_module
和deflate_module
,一切都恢复正常。