Centos 6.8,Apache 2.2,稳定多年,突然 mod_rewrite 似乎失败了

Centos 6.8,Apache 2.2,稳定多年,突然 mod_rewrite 似乎失败了

我有一个多年来一直稳定的设置。突然,我在 Apache 错误日志中收到文件不存在的错误,而这些文件应该由 mod_rewrite 处理。

昨晚我对 php/mysql(不是 apache)进行了包更新,但我回滚后问题仍然存在。.htaccess 和 apache 配置没有受到影响。

我仍在寻找线索,但目前几乎一无所获。

似乎我们从本地网络(与服务器所在的网络不同)访问的任何内容都没有问题。如果我从手机上通过 wifi 访问它,我有时会遇到问题。

所有文件不存在的路径对于 mod_rewrite 来说都是有效的。我可以毫无问题地访问它们。

有点困惑,不知道下一步该寻找什么。

我继承了这个配置并且试图不去触碰它但是这是我们为这个虚拟主机得到的。

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.domain.com
RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L]

在公共文件夹中还有一个包含大量配置的 .htaccess。以下是相关部分:

RewriteEngine On
RewriteBase /

#Correct some bad external links
RewriteRule ^lh$ / [L,R=301]

<FilesMatch "^cart$">
                ForceType application/x-httpd-php
</FilesMatch>

我已将mod_rewrite日志记录增加到9,并匹配了apache错误日志中的一个请求。

init rewrite engine with requested uri /cart/ViewItem/6054668
applying pattern '^(.*)$' to uri '/cart/ViewItem/6054668'
RewriteCond: input='www.domain.com' pattern='!^www.domain.com' => not-matched
pass through /cart/ViewItem/6054668
[perdir /home/user/domains/domain.com/public_html/] add path info postfix: /home/user/domains/domain.com/public_html/cart -> /home/user/domains/domain.com/public_html/cart/ViewItem/6054668
[perdir /home/user/domains/domain.com/public_html/] strip per-dir prefix: /home/user/domains/domain.com/public_html/cart/ViewItem/6054668 -> cart/ViewItem/6054668
[perdir /home/user/domains/domain.com/public_html/] applying pattern '^lh$' to uri 'cart/ViewItem/6054668'
[perdir /home/user/domains/domain.com/public_html/] pass through /home/user/domains/domain.com/public_html/cart

答案1

以下是我修复此问题的方法。

  1. 我放弃了所有的 FilesMatch/ForceType 东西。
  2. 我将所有没有扩展名的文件重命名为 .php
  3. 我修改了 .htaccess,让每个文件包含两条规则(可能可以合并为一条)

Options +FollowSymLinks

RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^cart$ ./cart.php
RewriteRule ^cart/(.*)$ ./cart.php`

我遇到的另一个问题是 ssh2 pecl 扩展导致分段错误。我升级了它并修复了分段错误,但它不再起作用。我用 phpseclib 替换了它。我仍然看到一些 pecl zip.so 分段错误。我仍然不明白是什么导致了这一切,但我现在不会在 centos 6.8 上升级到 php 5.6.28。这现在是一个已知问题:http://paul-m-jones.com/archives/6439

相关内容