У меня есть 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>
Первые два правила перезаписи предназначены для внутреннего API с использованием Phalcon, и они отлично работают в обеих средах. Третье правило перезаписи - это перехват всего для перенаправления всех запросов, которые не соответствуют реальному файлу, на start.php, который пытается сопоставить их с модулем Phalcon, а затем на страницу 404, если маршрут не соответствует.
По какой-то причине он работает под FreeBSD, на которой работает Apache 2.2.27, но не под CentOS, на которой на данный момент работает Apache 2.2.15. Это очень простое правило перезаписи, которое должно работать без проблем с любой версией Apache, но apache продолжает выдавать ошибку 404, когда я пытаюсь получить доступ к файлу. Я что-то упускаю? Очевидно, что конфигурация SSL и конкретные параметры отсутствуют в отображаемом коде, но это порядок, в котором требования появляются в 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
Интересно, может быть, проблема в неэкранированной точке. Попробуйте заменить эту строку:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*start\.php
С участием:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\.*start\.php