我是php&的新手codeigniter.i正在处理一个在服务器abcd.com
中运行的项目,我正在使用像这样的htaccess代码
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
现在我的项目已被移动到另一个服务器192.000.000.000.
我可以访问登录页面,当用户登录时会话已经设置并且它正在重定向到192.000.000.000/myproject/user
并且我在这里获得404错误
我在config.php中设置了base_url就像这样
$config['base_url'] = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http");
$config['base_url'] .= "://".$_SERVER['HTTP_HOST'];
$config['base_url'] .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
$config['index_page'] = '';
我的WINSCP项目结构
old one : /home/my_org/public_html/prjFolder
new one : /var/www/html/prjFolder
我的.htaccess文件就像这样
system/
application/
user_guide/
index.php
.htaccess
如果有人找到解决方案,请帮帮我..
答案 0 :(得分:2)
您提到您的项目已移至另一台服务器。您是否在虚拟主机中设置了AllowOverride指令(假设您使用Apache作为Web服务器)?如果禁用此选项,Apache将忽略您的.htaccess文件。快速测试是在你的.htaccess文件中放入一些无意义的东西,肯定会产生错误。如果没有收到服务器错误,则忽略.htaccess文件。
链接:http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride
另一个原因可能是mod_rewrite模块未启用(再次假设您正在使用Apache)。你没有说你粘贴的.htaccess代码是你完整的.htaccess文件,所以我不知道它是否检查该模块是否存在。检查这是否是原因的简单测试是尝试重写的结果URL:192.000.000.000/index.php/myproject/user
链接:http://httpd.apache.org/docs/current/mod/mod_rewrite.html
我假设您的.htaccess文件中没有任何错误,因为您似乎表示它在移动之前工作正常。
答案 1 :(得分:0)
我认为您的重写规则所指向的目的地问题
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
如果您通过网址访问您的项目
192.000.000.000/myproject/user
重写规则会将此更改为
192.000.000.000/index.php/myproject/user
您需要修改重写规则以从网址中排除 myproject / user 以传递给 index.php ,或者您只需删除 .htaccess 如果这只是一个开发机器,我隐藏 index.php 的原因是这个url看起来很漂亮。拥有它在开发环境中根本不会受到伤害。
答案 2 :(得分:0)
我找到了解决方案,这是apache rewrite_module的问题。我改变了我的httpd.conf文件,现在它完美无缺。
将AllowOverride None
更改为AllowOverride All
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
并使用putty # service httpd restart
参考网址: - http://dev.antoinesolutions.com/apache-server/mod_rewrite