Покинул форум
Сообщений всего: 8
Дата рег-ции: Март 2009
Помог: 0 раз(а)
Проблема заключается в следующем: у меня есть набор некоторых правил, и мне нужно, что бы если ни одно из правил не подошло, выполнилось последнее правило( т.е. выполнился скрипт aaa.php). Привожу свой файл .htaccess:
1. На сколько знаю, mod_rewrite использует perl'овые регулярные выражения, а по их правилам \w (опять же, если не ошибаюсь) обозначает примерно следующее: все буквы, цифры и символ "_".
2. К сожалению такой способ у меня не прокатит.. У меня структура такая: если пользователь открывает страницу index.php?action=aaa, то ему открывается файлик aaa.php, допустим. И, соответственно, нужно, что бы когда он ввёл сразу адрес aaa.php, то обманывать его, что такой файл не существует.
Champion
Отправлено: 16 Марта, 2009 - 09:27:53
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
senneco пишет:
\w (опять же, если не ошибаюсь) обозначает примерно следующее: все буквы, цифры и символ "_".
Это праильно, но [\w] означает любой из 2 символов \ или w.
senneco пишет:
И, соответственно, нужно, что бы когда он ввёл сразу адрес aaa.php, то обманывать его, что такой файл не существует.
Ты и не будешь его обманывать, ему просто откроется ааа.php. Ну и к последней строчке можешь добавить остальные 2 твоих
senneco
Отправлено: 16 Марта, 2009 - 11:43:54
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Март 2009
Помог: 0 раз(а)
Champion пишет:
Это праильно, но [\w] означает любой из 2 символов \ или w.
А может нужно заэкранировать \, что бы получилось именно "любой из двуз символов \ и w"(типа \\w)? Или я совсем не понял регулякри?)
Champion пишет:
Ты и не будешь его обманывать, ему просто откроется ааа.php. Ну и к последней строчке можешь добавить остальные 2 твоих
, то получится, что если страница не найдена, тогда открыть aaa.php. А мне нужно наоборот - чтобы если ввели aaa.php, то сказать, что файл не найден, хотя на самом деле aaa.php существует.
P.S.: Посмотрел на свой первый пост, и мне сайчас кажется, что я неправильно сформулировал вопрос, извиняюсь
Champion
Отправлено: 16 Марта, 2009 - 11:56:15
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
senneco пишет:
А может нужно заэкранировать \, что бы получилось именно "любой из двуз символов \ и w"(типа \\w)? Или я совсем не понял регулякри?)
Заметь разницу: (\w) и [\w]. В первом случае - то, что тебе надо любой символ, который может присутсвовать в слове.
senneco пишет:
у меня есть набор некоторых правил, и мне нужно, что бы если ни одно из правил не подошло, выполнилось последнее правило( т.е. выполнился скрипт aaa.php)
Если ни одно из правил не подошло, то выполняется ааа.php - так и будет, если aaa.php - это ErrorDocument.
senneco пишет:
А мне нужно наоборот - чтобы если ввели aaa.php, то сказать, что файл не найден, хотя на самом деле aaa.php существует.
Теперь совсем не понял.
Попробуй объяснить еще раз сначала вот так:
-пользователь ввел такое - получил такое;
-пользователь ввел такое - получил такое;
IOpeH
Отправлено: 16 Марта, 2009 - 14:15:47
Частый гость
Покинул форум
Сообщений всего: 175
Дата рег-ции: Нояб. 2007
Помог: 0 раз(а)
Champion пишет:
Теперь совсем не понял.
он заблочить файл хочет
Champion
Отправлено: 16 Марта, 2009 - 15:26:06
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
И когда пользователь вводит адрес http://site[dot]com/aaa mod_rewrite перенаправлял его соответственно на http://site[dot]com/index.php?action=aaa . А если пользователь открывает http://site[dot]com/aaa.php ( или http://site[dot]com/bbb.php или http://site[dot]com/ссс.php или http://site[dot]com/index.php - не важно), то выполнять скрипт error.php, который выводит сообщение, что страница не найдена.
Ещё пробовал сделать так:
Последнее правило в .htaccess такое, что если в адресе присутствует .php, то выполнить какой-то скрипт, например error.php, но в таком случае, даже если введённый адрес подходил под предыдущие правила, а под это нет, то всё равно выполнялся этот скрипт error.php .
Можно выявить другую подзадачу: если в адресе написано .php, тогда выполнить error.php , иначе уже смотреть под какое правило подходит адрес
Champion
Отправлено: 17 Марта, 2009 - 08:50:16
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Во-первых что за if-else-else.
Что-то ты мудришь. Запрети все файлы, кроме index.php, как я написал предыдущим постом. Пропиши правило
RewriteRule ^(\w+)$ index.php?action=$1
А на ошибку 403 (которая возникнет из-за того, что ты запретил все файлы) поставь error.php: ErrorDocument 403 /error.php
valenok
Отправлено: 17 Марта, 2009 - 11:20:27
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
немного не в тему, но как выполнить правило если не одно не подошло:
всем правилам поставить флаг [L] Last так чтоб остальные правила если это подошло не выполнялись
и самым последним поставить свое правило которое соответствует чему угодно.
----- Truly yours, Sasha.
senneco
Отправлено: 17 Марта, 2009 - 12:09:45
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Март 2009
Помог: 0 раз(а)
Champion пишет:
Во-первых что за if-else-else.
Табуляция не отобразилась - если "приглядеться", то можно увидеть вложенность условий
Champion пишет:
Запрети все файлы, кроме index.php, как я написал предыдущим постом
Да, это было бы решением моей проблемы. Только не получается сделать так, что бы блочились все файлы кроме index.php.
valenok пишет:
немного не в тему, но как выполнить правило если не одно не подошло
Это, наверно, как раз то, что мне нужно ) Пробовал добалять к концу каждого правила [L] - не помогает, к сожалению.
Champion
Отправлено: 17 Марта, 2009 - 12:35:50
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
senneco пишет:
Табуляция не отобразилась - если "приглядеться", то можно увидеть вложенность условий
Точно. Извини. Кстати, в тегах [php] табуляция сохраняется.
senneco пишет:
Только не получается сделать так, что бы блочились все файлы кроме index.php.
Такое не прокатило. По идее же <Files "php$"> означает, что "применить ко всем фалам с маской ...". Но у меня почему-то совсем не хотело работать ни эта маска, ни какая другая. Методом тыка написал-таки
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.