CodeIgniter .htaccess index.php重写不在用户目录上工作

我有一个与codeigniter有点问题,我有一个.htaccess重写index.php它工作得很好,如果我把我的项目在/ var / www或如果我做一个虚拟主机。

但是我想使用我的用户目录,如http:// localhost /〜userdir / myproject 。 如果我使用我的用户目录,当我试图请求一个控制器,如: http:// localhost /〜userdir / myproject /注册我得到这个错误:

未find

在此服务器上未find请求的URL /index.php。

这是我目前的configuration:

的.htaccess

RewriteEngine on RewriteCond $1 !^(index\.php|(.*)\.swf|forums|images|css|downloads|jquery|js|robots\.txt|favicon\.ico) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?/$1 [L,QSA] 

应用/configuration/ config.php中

 $config['base_url'] = ''; $config['index_page'] = ''; $config['uri_protocol'] = 'AUTO'; $config['encryption_key'] = 'myencryption_key'; //all remaining is the default config 

这个configuration在http:// localhost /上的效果很好,而且在http://example.com/这个域中的生产环境上,但是在我的用户目录http:// localhost /〜userdir / project /

我做错了什么? 有什么想法吗? 提前致谢。

好吧,我在codeigniter论坛中找到了一个解决方案,首先我需要添加RewriteBase行如下:

 RewriteBase /~userdir/myproject/ 

然后,删除最后一行index.php之前的斜杠。

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

有人这样说

 RewriteCond $1 !^(index\.php|(.*)\.swf|forums|images|css|downloads|jquery|js|robots\.txt|favico​​n\.ico) 

是多余的,下面两行代码覆盖它,

 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d 

和所有其他真实的文件/目录。 他们基本上说:“如果请求不是一个真正的文件,并且请求不是一个真正的目录,请将请求传递给index.php。大概所有从上面的行是一个真正的文件或目录,所以这是不需要的所有。

所以,我的最终.htaccess是这样的:

 RewriteEngine on RewriteBase /~userdir/myproject/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L,QSA] 

它可以在http:// localhost /〜userdir / myproject的本地工作,也可以通过http://example.com/~userdir/myproject制作

你需要像这样删除第一个斜杠berfore index.php

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

本地解决方案

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

在线解决方案 RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?/$1 [L]