| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Администрирование Web серверов и Web служб > ошибочный синтаксис .htaccess |
| Автор: Drkwv 31.10.2007, 05:21 | ||
Возникла проблема с хостером, упорно утверждающим, что синтаксис директив .htaccess некорректен:
Это действительно так? Тут действительно имеется ошибка? Скрипт при этом редиректе падает с ошибкой 500 (причем не везде, а только у них на хостинге). |
| Автор: ZeeLax 31.10.2007, 06:02 |
| Лог читали? |
| Автор: Drkwv 31.10.2007, 07:18 | ||
access_log мне подключить удалось, но там нет ничего интересного, а error_log не появляется (видимо, из-за того что ошибка не фиксируется). Где посмотреть лог самого реврайта - я не знаю да и очень сомневаюсь, что он там вообще ведется. Сами же директивы работают просто - первый раз редиректит на index, а второй, когда обнаруживается подмена скрипта на самого себя, rewrite прекращает свою работу и запускает index. Этот способ описан по-моему, даже где-то в доках по apache. |
| Автор: Drkwv 31.10.2007, 15:11 | ||||
А вот тут начинается самое интересное:
этот код работает как надо. Заменяем на index.php5 - не работает. И я не могу понять логику людей тупо твердящих, что проблема в синтаксисе. Может я не знаю чего? |
| Автор: ZeeLax 31.10.2007, 15:16 |
| А php5 верно обрабатываются при вызове напрямую? |
| Автор: Drkwv 31.10.2007, 16:46 | ||
Да. |
| Автор: ZeeLax 1.11.2007, 04:01 |
| Нужен лог. |
| Автор: Drkwv 1.11.2007, 17:11 | ||||||||||
От службы тех. поддержки пришло письмо с правильным вариантом .htaccess. Пробным путем выяснилось, что работоспособность mod_rewrite зависит от одной строчки:
Т.е. код:
работает, а
не работает. Чем можно объяснить такое поведение? UPD:
также выдает ошибку. |
| Автор: ZeeLax 1.11.2007, 19:06 | ||
а
работает? |
| Автор: Drkwv 1.11.2007, 19:22 | ||||||
Да, работает а
при запросе прямо на 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 | ||||||||
Конечно существует. Выводит phpinfo. Добавлено @ 19:50
работает
выдает ошибку
редиректит, но пропускает запросы напрямую к существующим файлам и директориям |
| Автор: ZeeLax 1.11.2007, 21:02 | ||
Тогда какой может быть редирект сам на себя, если
, проверив его на существование, не будет делать rewrite? P.S. Пошла полемика. Читайте ман по реврайту и лог апача - он всё знает. |
| Автор: Drkwv 2.11.2007, 07:43 | ||||
Да, я ошибся. Там AND по умолчанию для всех RewriteCond, поэтому не должен срабатывать. Сейчас наконец разобрался - оно с index.php5 посылало запрос в /cgi-bin/php5.cgi а mod его перехватывал и отправлял обратно на index.php5. В любом случае от хостера который не мог нормально ответить на мой вопрос, заставив потратить на это время, клиента нужно будет уводить куда-нибудь на мастерхост, что я и сделаю.
рабочий код, который, правда, не спасает от trailing slash если скрипт внутри директории. Возможно, если его чуть-чуть модифицировать, эту проблему тоже можно будет решить. Спасибо за участие. |
| Автор: ZeeLax 2.11.2007, 07:46 |
| Логи всё расскажут. |
| Автор: Drkwv 2.11.2007, 07:53 |
| Логи безмолвствуют. |
| Автор: ZeeLax 2.11.2007, 09:03 |
| Действительно странный хостер - чтобы при 500-ой ошибке было тихо в логах... |