CodeIgniter的重写不起作用

Sve*_*len 5 mod-rewrite codeigniter apache2

我已经安装了一个干净的Apache2(加上PHP和MySQL)服务器并启用mod_rewrite了apache配置.我添加了.htaccess文件以从URL中删除index.php,如CodeIgniter wiki中所述.

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
Run Code Online (Sandbox Code Playgroud)

我把这个文件放在网站的根目录下.

当我尝试访问该URL时,mydomain.local/index.php/welcome我得到CodeIgniter的默认页面.但是当我尝试访问同一页面时,mydomain.local/welcome我得到了404页面.

如何检查整个重写规则是否有效?为什么它不起作用?

Que*_*cia 9

假设您的配置(/application/config/config.php)已禁用index_page:

$config['index_page'] = '';
Run Code Online (Sandbox Code Playgroud)

你的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>
Run Code Online (Sandbox Code Playgroud)

您应该注意到RewriteBase指向DocumentRoot(/).如果index.php在另一个目录中,则应相应地更改RewriteBase.

对于像这样的目录结构:

/srv/www/application/
/srv/www/system/
/srv/www/index.php
/srv/www/.htaccess
Run Code Online (Sandbox Code Playgroud)

你的RewriteBase应该是:/

对于像这样的目录结构:

/srv/www/codeigniter/application/
/srv/www/codeigniter/system/
/srv/www/codeigniter/index.php
/srv/www/codeigniter/.htaccess
Run Code Online (Sandbox Code Playgroud)

你的RewriteBase应该是:/ codeigniter /

等等,你得到了图片.


Sve*_*len 9

我找到了解决方案.Apache配置不允许运行htaccess文件.所以我必须AllowOverride在目录上设置标志AllowOverride ALL.

感谢您的帮助!