首先为我糟糕的英语道歉
下面是我对这个问题的背景:我有2个项目使用codeigniter团队创建的1个项目名称项目:client_site另一个由团队b创建的名称项目:server_site在prod机上的结构目录为:
——www
——应用程序(文件夹)
——系统(文件夹)
-------- . htaccess
-------- server_site(文件夹)
--------------- 应用程序(文件夹)
--------------- 系统(文件夹)
--------------- . htaccess
问题开始今天,突然当管理员无法登录到服务器站点(在上午9点)当管理员提交登录面板时,它说找不到页面(404),突然可以在中午12点再次登录今天晚上17点admin无法再次登录,但客户端网站没有问题,他们仍然可以访问添加/编辑/添加项目,只发生在服务器站点
我不明白为什么,也许我得到了错误的应用程序代码但当我检查控制器和功能时,它已经在那里了Controller home.php with function login()
我的老板说,我的htaccess设置错误了
here my htaccess:
在根站点(client_site):
RewriteEngine on <br/>
RewriteCond %{REQUEST_FILENAME} !-f<br/>
RewriteCond %{REQUEST_FILENAME} !-d<br/>
RewriteCond $1 !^(index'.php|images|font|banners|buttons|css|detik|js|robots'.txt|favicon'.ico)<br/>
RewriteCond $1 !^(index'.php|application/views/|robots'.txt|install|favicon'.ico|documents)
RewriteRule ^(.*)$ /index.php?/$1 [L]<br/>
RewriteCond %{HTTP_HOST} !^www'.(.+)$ [NC]<br/>
RewriteRule ^(.*)$ http://www.client_site.net/ [R=301,L]<br/>
on server_site:
RewriteEngine on <br/>
RewriteCond %{REQUEST_FILENAME} !-f<br/>
RewriteCond %{REQUEST_FILENAME} !-d<br/>
RewriteCond $1 !^(index'.php|images|img|css|js|robots'.txt)<br/>
RewriteCond $1 !^(index'.php|application/views/|robots'.txt|install|favicon'.ico|documents)<br/>
RewriteRule ^(.+)$ index.php?/$1 [L,QSA]<br/>
RewriteCond %{HTTP_HOST} !^www'.<br/>
RewriteRule ^(.*)$ http://www.[%]{HTTP_HOST}/server_site/$1 [R=301,L]<br/>
有人能帮帮我吗?
在服务器端,您有两个问题
RewriteRule ^(.+)$ index.php?/$1 [L,QSA]
这与客户端不同,.+
vs .*
, index.php
vs /index.php
, L,QSA
vs L
。
第二点可能更严重,[%]{HTTP_HOST}
将不起作用,因为它没有被替换。您必须使用%{HTTP_HOST}
来代替
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/server_site/$1 [R,L]
当一切正常工作时,您可以将R
更改为R=301
。永远不要在启用301
的情况下进行测试,详细信息请参阅此答案。htaccess重写规则的调试技巧