为什么我的.htaccess在部署时停止工作


why did my .htaccess stop working on deployment

我有一个codeigniter网站,它有一个破碎的链接结构。它在我温暖的当地环境中工作正常。但是,当我部署到我的共享主机站点时,链接停止工作。初始页面正常加载。我的导航栏看起来像:

<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

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

我不知道,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。

Try This,

Options -Multiviews
RewriteEngine on
Rewritebase /projectname
RewriteCond $1 !^(index'.php|images|uploads|robots'.txt)
RewriteRule ^(.+)$ /index.php?$1 [L]

打开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