如果没有获取请求中的index.php,Codeigniter不起作用?

时间:2016-10-04 17:31:31

标签: php .htaccess codeigniter codeigniter-2

我使用以下.htaccess:

AddDefaultCharset utf-8
RewriteEngine On

RewriteBase /
DirectoryIndex index.php
Options All -Indexes

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

Codeigniter中的设置:

$config['index_page'] = '';
$config['uri_protocol'] = 'AUTO';

因此,所有网页都是通过网址路径domain/index.php/page

打开的

但它不适用于domain/page

2 个答案:

答案 0 :(得分:0)

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

尝试将以上行更改为以下内容:

RewriteRule (.*) index.php/$1 [L]

具体而言,替换中的?被删除。因此,不是将请求的URL作为查询字符串的一部分传递(这会阻止使用任何其他查询字符串),而是将其作为附加的PATH INFO传递。

RewriteRule模式周围的锚也不是必需的。并且替换上的斜杠前缀也可以被删除 - 这就是RewriteBase指令的用途。

Options All -Indexes

此外,这不是严格有效的。你不应该把+/- params与那些没有的人混在一起。这应该只是:

Options -Indexes

答案 1 :(得分:0)

试试这个.htaccess

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

在配置文件

$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';