Apache 重寫可以在 FreeBSD 下運行,但不能在 CentOS 下運行

Apache 重寫可以在 FreeBSD 下運行,但不能在 CentOS 下運行

我有 5 台運行 FreeBSD 9.2 的生產伺服器,但我們計劃過渡到 CentOS。因此,我嘗試使用 CentOS 6.6 設定一些虛擬機器來模擬我們的生產伺服器環境。我已經設定好了一切,效果很好,保存了一個重寫規則。

<Directory /var/www/html/www/trunk/amapi>
  RewriteEngine on
  RewriteRule  ^$ public/    [L]
  RewriteRule  (.*) public/$1 [L]
</Directory>
<Directory /var/www/html/www/trunk/amapi/public>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
</Directory>
<Directory /var/www/html/www/trunk>
  RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*start\.php
  RewriteRule ^start.php/?(.*)$ $1 [R=301,L]

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ start.php/$1?%{QUERY_STRING} [L]
</Directory>

前兩個重寫規則適用於使用 Phalcon 的後端 API,它們在兩種環境中都能完美運作。第三條重寫規則是包羅萬象的規則,將所有與真實檔案不匹配的請求重定向到start.php,該檔案嘗試將它們匹配到Phalcon 模組,然後如果沒有路由匹配,則重定向到404 頁面。

由於某種原因,它可以在運行 Apache 2.2.27 的 FreeBSD 下運行,但不能在運行 Apache 2.2.15 的 CentOS 下運行。這是一個非常簡單的重寫規則,應該可以在任一版本的 Apache 下工作,沒有任何問題,但是當我嘗試存取該檔案時,apache 不斷拋出 404。我錯過了什麼嗎?顯然,顯示的程式碼中缺少 SSL 配置和特定選項,但這些是 reqrites 在 ssl.conf 中出現的順序。

先致謝

更新:Apache 重寫日誌是:

10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (2) init rewrite engine with requested uri /letters/custom/test
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (3) applying pattern '^/attc2/(.*)$' to uri '/letters/custom/test'
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (3) applying pattern '^/forms/(.*)$' to uri '/letters/custom/test'
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (3) applying pattern '^/grafx/(.*)$' to uri '/letters/custom/test'
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (3) applying pattern '^/xport/(.*)$' to uri '/letters/custom/test'
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (3) applying pattern '.*' to uri '/letters/custom/test'
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (4) RewriteCond: input='' pattern='!.*mydomain.com/.*$' [NC] => matched
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (4) RewriteCond: input='/letters/custom/test' pattern='\\.(jpg|gif|png)$' => not-matched
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (1) pass through /letters/custom/test

答案1

我想知道這個問題是否可能只是一個未轉義的點。試著替換這一行:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*start\.php

和:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\.*start\.php

相關內容