为什么我的.htaccess会停止部署

时间:2014-03-29 03:05:16

标签: php apache .htaccess codeigniter

我有一个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

但是当我将它推送到我的生产服务器时,这似乎不起作用。我该如何解决这个问题?

3 个答案:

答案 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