我在stackoverflow上看到了很多类似我的问题,但所有解决方案对我都不起作用。
我有像example.com和codeigniter应用程序这样的域名 - example.com/codeigniter。
我在主目录中没有任何.htaccess但我想从我的codeigniter应用程序中删除index.php。
的config.php :
$config['base_url'] = 'http://example.com/codeigniter';
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';
我试过了:
RewriteEngine on
RewriteBase codeigniter
RewriteCond $1 !^(index\.php|assets|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
但我有错误:
内部服务器错误
服务器遇到内部错误或配置错误,无法完成您的请求。
请与服务器管理员postmaster@example.com联系,告知他们错误发生的时间,以及可能导致错误的任何操作。
服务器错误日志中可能提供了有关此错误的更多信息。
下一个解决方案也不起作用:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /codeigniter/index.php?/$1 [L]
因为当我尝试像www.example / codeigniter / user / login一样调用我的控制器时出错:
未找到
在此服务器上找不到请求的URL / codeigniter / user / login。
答案 0 :(得分:3)
保留config.php中的默认设置
尝试使用htaccess代码:
在我的Ubuntu Server中为我工作:
RewriteEngine on
RewriteCond $1 !^(index\.php|assets|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
还要确保在服务器上启用了重写模块。 您可以使用以下代码进行检查:
print_r(apache_get_modules());
答案 1 :(得分:1)
检查这些差异:
在APPPATH.'config/config.php'
:
$config['base_url'] = 'http://example.com/codeigniter/';
在.htaccess
:
RewriteEngine on
RewriteBase /codeigniter/
RewriteCond $1 !^(index\.php|assets|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
我的回答差异主要是使用斜杠。要以常规方式运行,CI要求base_url()
以斜杠结尾。需要告诉Apache .htaccess
文件从root开始的位置,用起始斜杠表示。结尾斜杠告诉Apache任何附录都应该从没有斜线开始。这是惯例,就像在根目录中一样,RewriteBase只是用斜杠设置或更好地说它以斜杠结尾。试试这个,如果更多错误在评论中说明,因为不同的服务器可以不同地解释.htaccess
代码。