Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > ошибочный синтаксис .htaccess


Автор: Drkwv 31.10.2007, 05:21
Возникла проблема с хостером, упорно утверждающим, что синтаксис директив .htaccess некорректен:
Код

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php5

Это действительно так? Тут действительно имеется ошибка?
Скрипт при этом редиректе падает с ошибкой 500 (причем не везде, а только у них на хостинге).

Автор: ZeeLax 31.10.2007, 06:02
Лог читали?

Автор: Drkwv 31.10.2007, 07:18
Цитата(ZeeLax @ 31.10.2007,  06:02)
Лог читали?

access_log мне подключить удалось, но там нет ничего интересного, а error_log не появляется (видимо, из-за того что ошибка не фиксируется).

Где посмотреть лог самого реврайта - я не знаю да и очень сомневаюсь, что он там вообще ведется.

Сами же директивы работают просто - первый раз редиректит на index, а второй, когда обнаруживается подмена скрипта на самого себя, rewrite прекращает свою работу и запускает index. Этот способ описан по-моему, даже где-то в доках по apache.

Автор: ZeeLax 31.10.2007, 14:52
А модуль то подключен?

Добавлено через 1 минуту и 48 секунд
Цитата(Drkwv @  31.10.2007,  10:18 Найти цитируемый пост)
access_log мне подключить удалось, но там нет ничего интересного, а error_log не появляется (видимо, из-за того что ошибка не фиксируется).

Где посмотреть лог самого реврайта - я не знаю да и очень сомневаюсь, что он там вообще ведется.

Видимо, потому, что криво настроено логирование. Или не там искали. Логов реврайта нет - он модуль апача, и всё, связанное с ним (с реврайтом) логирует апач.

Автор: Drkwv 31.10.2007, 15:11
Цитата(ZeeLax @ 31.10.2007,  14:52)
А модуль то подключен?

А вот тут начинается самое интересное:
Код

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php

этот код работает как надо. Заменяем на index.php5 - не работает. И я не могу понять логику людей тупо твердящих, что проблема в синтаксисе. Может я не знаю чего?

Автор: ZeeLax 31.10.2007, 15:16
А php5 верно обрабатываются при вызове напрямую?

Автор: Drkwv 31.10.2007, 16:46
Цитата(ZeeLax @ 31.10.2007,  15:16)
А php5 верно обрабатываются при вызове напрямую?

Да.

Автор: ZeeLax 1.11.2007, 04:01
Нужен лог.

Автор: Drkwv 1.11.2007, 17:11
От службы тех. поддержки пришло письмо с правильным вариантом .htaccess. Пробным путем выяснилось, что работоспособность mod_rewrite зависит от одной строчки:
Код

RewriteCond %{REQUEST_FILENAME} !-f

Т.е. код:
Код

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php5

работает, а 
Код

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php5

не работает. Чем можно объяснить такое поведение?

UPD:
Код

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php5
или
Код

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php5
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php5

также выдает ошибку.

Автор: ZeeLax 1.11.2007, 19:06
а
Код

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php5

работает?

Автор: Drkwv 1.11.2007, 19:22
Цитата(ZeeLax @ 1.11.2007,  19:06)
а
Код

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php5

работает?

Да, работает

а
Код

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* index.php5

при запросе прямо на index.php5 или другие файлы выдает ошибку. 
Я бы мог предположить, что оно вываливает ошибку если редирект идет сам на себя, но
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php5
тогда должен валиться при запросе прямо на index.php5, т.к. он является файлом и не подходит под первый RewriteCond и не является директорией, подходя под второй RewriteCond => должен перенаправить на самого себя и выдать ошибку, чего не происходит.

Автор: ZeeLax 1.11.2007, 19:32
Файл index.php5 существует?

Автор: Drkwv 1.11.2007, 19:39
Цитата(ZeeLax @ 1.11.2007,  19:32)
Файл index.php5 существует?

Конечно существует. Выводит phpinfo.

Добавлено @ 19:50
Код

RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* index.php5

работает
Код

RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php5

выдает ошибку
Код

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php5

редиректит, но пропускает запросы напрямую к существующим файлам и директориям

Автор: ZeeLax 1.11.2007, 21:02
Цитата(Drkwv @  1.11.2007,  22:39 Найти цитируемый пост)
Конечно существует. Выводит phpinfo.

Тогда какой может быть редирект сам на себя, если
Код

RewriteCond %{REQUEST_FILENAME} !-f

, проверив его на существование, не будет делать rewrite?

P.S. Пошла полемика. Читайте ман по реврайту и лог апача - он всё знает.

Автор: Drkwv 2.11.2007, 07:43
Цитата(ZeeLax @ 1.11.2007,  21:02)
, проверив его на существование, не будет делать rewrite?

Да, я ошибся. Там AND по умолчанию для всех RewriteCond, поэтому не должен срабатывать. Сейчас наконец разобрался - оно с index.php5 посылало запрос в /cgi-bin/php5.cgi а mod его перехватывал и отправлял обратно на index.php5. В любом случае от хостера который не мог нормально ответить на мой вопрос, заставив потратить на это время, клиента нужно будет уводить куда-нибудь на мастерхост, что я и сделаю.
Код

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !/cgi-bin/php5.cgi$
RewriteRule .* index.php5

рабочий код, который, правда, не спасает от trailing slash если скрипт внутри директории. Возможно, если его чуть-чуть модифицировать, эту проблему тоже можно будет решить. Спасибо за участие.

Автор: ZeeLax 2.11.2007, 07:46
Логи всё расскажут.

Автор: Drkwv 2.11.2007, 07:53
Логи безмолвствуют.   smile 

Автор: ZeeLax 2.11.2007, 09:03
Действительно странный хостер - чтобы при 500-ой ошибке было тихо в логах...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)