Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Директива в htaccess работает по разному

47K
15 ноября 2011 года
nechin
10 / / 10.06.2009
Добрый день.

Есть такие директивы в .htaccess

 
Код:
RewriteEngine On
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), то эти директивы работать перестают. В чем может быть проблема?
Спасибо!
4
15 ноября 2011 года
mike
3.7K / / 01.10.2002
Денвер - прошлый век. Поставьте себе Debian под VirtualBox и там все настройте.

А что такое \D в третей строке?
И вот это мне не очень понятно: ^((.)+)/$
47K
15 ноября 2011 года
nechin
10 / / 10.06.2009
Цитата: mike
А что такое \D в третей строке?


Как бы все нецифровые символы.

Цитата: mike
И вот это мне не очень понятно: ^((.)+)/$


Любая строка.

И что за вопросы вы задаёте? Это элементарные вещи!

274
15 ноября 2011 года
Lone Wolf
1.3K / / 26.11.2006
Цитата: nechin
Любая строка.


Вы в этом уверены? я что-то очень сомневаюсь..
Hint: почему плюс за закрывающей скобкой стоит?

Даи по сабжу: а на сервере rewrite_mod вобще установлен?

714
15 ноября 2011 года
clgs
226 / / 29.10.2008
Цитата: nechin
И что за вопросы вы задаёте? Это элементарные вещи!



Я думаю Вам стоит почитать тут http://htaccess.net.ru/

47K
15 ноября 2011 года
nechin
10 / / 10.06.2009
Цитата: Lone Wolf
Вы в этом уверены? я что-то очень сомневаюсь..
Hint: почему плюс за закрывающей скобкой стоит?


Уверен. Да и не в этом дело. Почему вы обратили внимание на эту строку? Она вообще могла отсутствовать в моем вопросе, т.к. к делу относится косвенно.

Цитата: Lone Wolf
Даи по сабжу: а на сервере rewrite_mod вобще установлен?


Установлен.

Цитата: clgs
Я думаю Вам стоит почитать тут http://htaccess.net.ru/


Там написано, почему апач разных хостингов может по разному обрабатывать регулярки? Где?

4
15 ноября 2011 года
mike
3.7K / / 01.10.2002
Цитата: nechin
Как бы все нецифровые символы.

Любая строка.

И что за вопросы вы задаёте? Это элементарные вещи!



Пытаюсь навести вас на ответ. Попробуйте так:

 
Код:
RewriteEngine On
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"
47K
15 ноября 2011 года
nechin
10 / / 10.06.2009
Цитата: mike
Пытаюсь навести вас на ответ. Попробуйте так: ...



Ваш вариант, логично, не сработал. Потому что \D это практически то же самое что и [a-z]. А у меня стоял именно \D (Не цифра (любой символ кроме символов 0-9)), а не ваш \d, который имеет противоположное значение.

4
15 ноября 2011 года
mike
3.7K / / 01.10.2002
Цитата: nechin
Ваш вариант, логично, не сработал. Потому что \D это практически то же самое что и [a-z]. А у меня стоял именно \D (Не цифра (любой символ кроме символов 0-9)), а не ваш \d, который имеет противоположное значение.



\D - это не цифры. Включая табуляцию, переносы строк и возврат коретки.

Самый простой способ отладить регулярные выражения - это упрощение. Например для первого варианта вот такая последовательность:

Сначала:

 
Код:
RewriteRule ^(.*)$ /path/$1.php [L]


если сработало, то потом

 
Код:
RewriteRule ^(\d{2}).*$ /path/$1.php [L]


если сработало, то потом

 
Код:
RewriteRule ^(\d{2}-).*$ /path/$1.php [L]


и так далее:

 
Код:
RewriteRule ^(\d{2}-[a-z]+.*$ /path/$1.php [L]
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]
47K
16 ноября 2011 года
nechin
10 / / 10.06.2009
RewriteRule ^(\d{2}).*$ /path/$1.php [L]
Перестает работать уже на этом варианте. При вводе http://site.ru/11/ число 11 не "перехватывается".
4
16 ноября 2011 года
mike
3.7K / / 01.10.2002
Цитата: nechin
RewriteRule ^(\d{2}).*$ /path/$1.php [L]
Перестает работать уже на этом варианте. При вводе http://site.ru/11/ число 11 не "перехватывается".



А так:

 
Код:
RewriteRule ^([0-9]+).*$ /path/$1.php [L]


и потом так:

 
Код:
RewriteRule ^([0-9]{2}).*$ /path/$1.php [L]
47K
16 ноября 2011 года
nechin
10 / / 10.06.2009
 
Код:
RewriteRule ^([0-9]{2}-[a-z]{3,10}-[0-9]{4})/$ /path/$1.php [L]
RewriteRule ^([a-z]{3,10}-[0-9]{4})/$ /path/$1.php [L]


Вот так сработало. Но всё равно не понятно, почему не сработали спецсимволы. Так и не ясно.
4
16 ноября 2011 года
mike
3.7K / / 01.10.2002
Потому что есть PCRE и POSIX REGEXP. Это немного разные вещи.

http://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions
http://en.wikipedia.org/wiki/Regular_expression#POSIX
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог