Помогите кто чем может разобраться с хостером. Клиент предоставил хостинг, некий Alkar.net где судя по хелпам ничего не менялось с десять лет, еще успешно используют CGI и так далее.
Когда я начал заливать сайт, в котором есть .htaccess с некоторыми правилами все стало колом 500 ошибки, но я такое встречаю время от времени особенно на хостингах Франции и Бельгии, но стоит найти и закоментить некоторое правило или добавить какое то новое которое они рекомендуют и все работает. Но стал я пытаться отыскать в чем проблема в этот раз наткнулся на то что никогда не мешало.
То есть все что не начинается на admin/|css/|images/|inc/|js/|m/|pma — передается на index.php. Это правило работало уже 4 года и я его никогда нигде не трогал и трогать тут нечего, работает оно и на моем тестовом хостинге, но у этого провайдера все выпадает в 500. Ему не нравится "?!" то есть отрицание того что идет далее.
Друзья, подскажите как быть, на этом правиле все и работает, без него никуда.
Если еще интересует, то Apache версии до 2.0 не поддерживает PCRE, а поддерживает только регулярные выражения POSIX (http://httpd.apache.org/docs/2.0/new_features_2_0.html).
Отрицательное утверждение (?! это возможность PCRE, а не регулярных выражений POSIX, поэтому и не работает.
Ведь написал же апач, что не может скомпилить это регулярное выражение.
Замените вашу строку на эти и будет работать и на старом Apache (проверено):
Попробуйте исключить папки через директиву RewriteCond. В вашей директиве используется возможность регулярных выражений в формате PCRE, возможно дело в этом.
RewriteRule работает, выше правила есть и mod_rewrite включен. Вообще вопрос снимается, хостер нам второй день выдавал пароль на MySQL что я сказал клиенту что пользоваться таким хостингом и мы уже проплатили нормальный.
Хотя конечно этот вопрос очень интересен, как то тут недавно была заметка на Хабре про .htaccess и я там оставлял сообщения что на разных хостингах разные директивы могут быть запрещены.
Нашел доступ к логам, уже хочу разобраться для себя. Ошибка следующая:
RewriteRule: cannot compile regular expression '^(?!admin/|css/|images/|inc/|js/|m/|pma/)(.+)$'