我有一个与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|favicon\.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]