Назад | Перейти на главную страницу

Centos 6.8, Apache 2.2, стабильная в течение многих лет, внезапно кажется, что mod_rewrite не работает

У меня есть установка, которая работает стабильно много лет. Внезапно я получаю, что файл не существует в журнале ошибок apache для элементов, которые должны обрабатываться mod_rewrite.

Вчера вечером я сделал обновление пакета на php / mysql (не на apache), но я откатился, и проблема все еще возникает. Конфигурация .htaccess и apache не была затронута.

Я все еще ищу подсказки, но пока у меня почти ничего нет.

Кажется, что все, что мы получаем из нашей локальной сети (которая отличается от той, в которой размещен сервер), никогда не имеет проблем. Если я нажимаю на него со своего телефона без Wi-Fi, я иногда вижу проблему.

Все пути к файлу не существуют, допустимы для обработки 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. Я отбросил все вещи 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. Я до сих пор не понимаю, чем все это вызвано, но я бы сейчас не стал обновляться до php 5.6.28 на centos 6.8. Теперь это известная проблема: http://paul-m-jones.com/archives/6439