Директива в htaccess работает по разному
Есть такие директивы в .htaccess
RewriteRule ^(\d{2}-\D{3,10}-\d{4})/$ /path/$1.php [L]
RewriteRule ^(\D{3,10}-\d{4})/$ /path/$1.php [L]
RewriteRule ^((.)+)/$ /file.php?p=$1 [L]
Первые две должны "перехватывать" ссылки вида http://site.ru/11-maya-2011/ и http://site.ru/may-2011/ и выполнять одноименный скрипт.
На localhost (denver) первые две отлично работают, но когда выкладываю на хостинг (majordomo), то эти директивы работать перестают. В чем может быть проблема?
Спасибо!
А что такое \D в третей строке?
И вот это мне не очень понятно: ^((.)+)/$
Вы в этом уверены? я что-то очень сомневаюсь..
Hint: почему плюс за закрывающей скобкой стоит?
Даи по сабжу: а на сервере rewrite_mod вобще установлен?
Я думаю Вам стоит почитать тут http://htaccess.net.ru/
Hint: почему плюс за закрывающей скобкой стоит?
Уверен. Да и не в этом дело. Почему вы обратили внимание на эту строку? Она вообще могла отсутствовать в моем вопросе, т.к. к делу относится косвенно.
Установлен.
Там написано, почему апач разных хостингов может по разному обрабатывать регулярки? Где?
Любая строка.
И что за вопросы вы задаёте? Это элементарные вещи!
Пытаюсь навести вас на ответ. Попробуйте так:
RewriteRule ^(\d{2}-[a-z]{3,10}-\d{4})/$ /path/$1.php [L]
RewriteRule ^([a-z]{3,10}-\d{4})/$ /path/$1.php [L]
RewriteRule ^(.+)/$ /file.php?p=$1 [L]
Не знаю как \d{3,10} могло прокатывать на "maya"
Ваш вариант, логично, не сработал. Потому что \D это практически то же самое что и [a-z]. А у меня стоял именно \D (Не цифра (любой символ кроме символов 0-9)), а не ваш \d, который имеет противоположное значение.
\D - это не цифры. Включая табуляцию, переносы строк и возврат коретки.
Самый простой способ отладить регулярные выражения - это упрощение. Например для первого варианта вот такая последовательность:
Сначала:
если сработало, то потом
если сработало, то потом
и так далее:
RewriteRule ^(\d{2}-[a-z]+-.*$ /path/$1.php [L]
RewriteRule ^(\d{2}-[a-z]+-\d{4}.*$ /path/$1.php [L]
RewriteRule ^(\d{2}-[a-z]+-\d{4})/$ /path/$1.php [L]
Перестает работать уже на этом варианте. При вводе http://site.ru/11/ число 11 не "перехватывается".
Перестает работать уже на этом варианте. При вводе http://site.ru/11/ число 11 не "перехватывается".
А так:
и потом так:
RewriteRule ^([a-z]{3,10}-[0-9]{4})/$ /path/$1.php [L]
Вот так сработало. Но всё равно не понятно, почему не сработали спецсимволы. Так и не ясно.