我有一个codeigniter网站,其链接结构已损坏。它在我的wamp本地环境中正常工作。但是,当我部署到我的共享主机站点时,链接停止工作。初始页面正常加载。我的Navbar看起来像:
<a class="brand" href="#">myproject</a>
<div class="nav-collapse">
<ul class="nav">
<li class="active"><a href="#">Home</a></li>
<li ><a href="http://localhost/projectname/basecontroller/Facts">Facts</a></li>
<li ><a href="http://localhost/projectname/basecontroller/about">About</a></li>
<li ><a href="http://localhost/projectname/basecontroller/contact">Contact</a></li>
<!--<li ><a href="http://localhost/projectname/basecontroller/privacy">Privacy</a></li>-->
</ul>
</div><!--/.nav-collapse -->
我已经使用git将我的网站部署到〜/ myaccount / domains / simon。然后我将public_html与〜/ myaccount / domains / simon联系起来。
lrwxrwxrwx 1 myaccount myaccount
30 Mar 28 17:35 public_html -> /home/myaccount/domains/simon
当我在wamp上本地尝试时,我在根目录中测试了以下.htaccess文件:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /projectname/index.php/$1 [L]
这似乎通过转动来修复目录结构:
http://localhost/projectname/basecontroller/contact
成:
http://localhost/projectname/index.php/basecontroller/contact
但是当我将它推送到我的生产服务器时,这似乎不起作用。我该如何解决这个问题?
答案 0 :(得分:1)
我不知道,mod_rewrite是黑魔法。这是一个很棒的工具,但是从来没有得到一致的结果,尤其是从一台服务器更换到另一台服务器时。
您可以尝试随机播放内容(例如:删除前导/
或删除/projectname/
或尝试设置rewrite_base
。)
这是我们在某些服务器上使用的内容(但它并不适用于所有服务器):
首先,检查文件系统上是否存在URL并且不执行任何操作(images,css,robots.txt,index.php等):
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ - [L,QSA]
然后,如果失败,将所有请求发送到您的PHP文件(在检查当前URL是否已经转到该文件之后):
RewriteCond %{REQUEST_URI} !index.php$
RewriteRule ^(/?)(.*)$ $1index.php [L,QSA]
特别注意我们检查可选前导斜杠并将其放在URL的开头(如果有)。你的代码没有检查,然后总是把一个前导斜杠。这可能是问题。
此外,您几乎总是希望在选项列表中包含QSA。
答案 1 :(得分:1)
试试这个,
Options -Multiviews
RewriteEngine on
Rewritebase /projectname
RewriteCond $1 !^(index\.php|images|uploads|robots\.txt)
RewriteRule ^(.+)$ /index.php?$1 [L]
答案 2 :(得分:1)
打开config.php 然后尝试改变
$config['uri_protocol'] = 'AUTO';
其中一个
| 'PATH_INFO' Uses the PATH_INFO
| 'QUERY_STRING' Uses the QUERY_STRING
| 'REQUEST_URI' Uses the REQUEST_URI
| 'ORIG_PATH_INFO' Uses the ORIG_PATH_INFO