从子目录

时间:2016-03-25 12:50:32

标签: php .htaccess codeigniter mod-rewrite

我在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。

2 个答案:

答案 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代码。