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

标签 php apache .htaccess codeigniter

我有一个 codeigniter 网站,该网站的链接结构已损坏。它在我的 wamp 本地环境中工作正常。但是,当我部署到共享托管站点时,链接停止工作。初始页面加载正常。我的导航栏看起来像:

<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,并且不执行任何操作(图像、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。

关于php - 为什么我的 .htaccess 在部署时停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22726470/

相关文章:

php - 使用 preg_replace 清理查询但允许一些特殊字符

php - fpdf - 返回上一页

php - 在WordPress中为bizway主题设置背景颜色

php - 令人费解的 .htaccess/PHP 难题

apache - 重定向网址无效

apache - AEM 6.3 : Bad Request when replacing dot in selector for slash

php - 我想在一个单独的 php 文件上运行 wp_query 以进行 ajax 调用

apache - JMeter - jorphan 代表什么

php.ini - 路径错误?

asp.net - 防止 ASP.NET 重定向到 login.aspx