Q: Сервер отдает 403 роботу яндекса.

12
Lupus
На сайте с 02.11.2002
Offline
241
#11

Прогнал эти правила на тестовом серве. Первое, как и ожидалось, не работает вообще. Второе работает правильно. Третье выполняет лишнюю операцию, но сгодится на случай прямого обращения к index.php.

Кстати, процитированный занудой пример из дока полностью нерабочий. Оставляю ему право самому отправить это наблюдение автору. :D

There are two types of people in this world: 1. Those who can extrapolate from incomplete data.
На сайте с 18.10.2006
Offline
12
#12

[off]

Lupus, для начала приведенный док не "волонтерский", а создателя mod_rewrite =)

Как и в нем, в других уважаемых источниках прямой слэш не экранируется.

При указании RewriteRule "Substitution" может иметь ведущий слэш, если указывается абсолютный путь к файлу (от DocumentRoot), а не относительно RewriteBase.

Ostmaster, "второй слеш апач отфильтрует на входе" - Apache 1.3.37 не отфильтровал, 2.2.4 - отфильтровал (на localhost).

Каюсь, приведенный мной пример был написан для использования в httpd.conf, а не в .htaccess. На этапе обработки правил из httpd.conf url содержит ведущие слэши, а на этапе обработки правил из .htaccess в url ведущих слэшей уже нет. Тем не менее, он абсолютно корректный (как ни удивительно =))

[\off]

ostmaster
На сайте с 01.09.2002
Offline
222
#13

Я ничего не утверждала однозначно - читайте внимательно.

Я попыталась помочь, ответив на вопрос, который "подвис" (и насколько я понимаю он и сейчас без ответа), предупредив, что я не специалист в этих вопросах.

Почему бы Вам не направить свою энергию на решение конкретной проблемы, коль Вы так владеете темой?

А :D?


Тестирование мобильных приложений и сайтов (/ru/forum/1032925) https://www.facebook.com/ostmaster (https://www.facebook.com/ostmaster)
Lupus
На сайте с 02.11.2002
Offline
241
#14

NA Кролик-Зануда, поскольку вы решили порассуждать "академически", попробую ответить в вашем тоне. ;)

NA Кролик-Зануда:
Как и в нем, в других уважаемых источниках прямой слэш не экранируется.

Прямой слеш не относится с спецсимволам регулярных выражений, если не является ограничителем. Разумеется, его можно не экранировать в данном случае. Однако, по нескольким причинам, это лучше бы делать. Если вам угодно развести длинный оффтоп, на тему "почему именно", давайте в другом месте.

NA Кролик-Зануда:
При указании RewriteRule "Substitution" может иметь ведущий слэш, если указывается абсолютный путь к файлу (от DocumentRoot), а не относительно RewriteBase.

Более того, в контексте server config путь от DocumentRoot обязателен. Еще добавлю, что при его наличии, обходится подстановка RewriteBase в контексте per-dir.

NA Кролик-Зануда:
Каюсь, приведенный мной пример был написан для использования в httpd.conf, а не в .htaccess.

Хм. Оказывается для этих двух контекстов разные RewriteRule? И примеры в доках могут быть написаны специально для одного из них? ;)

NA Кролик-Зануда:
На этапе обработки правил из httpd.conf url содержит ведущие слэши, а на этапе обработки правил из .htaccess в url ведущих слэшей уже нет.

Какое это имеет значение? Если заглянете в код, то увидите любопытный комментарий на эту тему:

... so we skip the / after the
hostname and compare/substitute only the stuff after it.

Повторяю: приведенный вами пример полностью нерабочий, ни в per-dir ни в server-config контекстах (как ни удивительно ;)). И если вы намерены продолжать спор о его "абсолютной корректности", потрудитесь сперва его протестировать.

На сайте с 18.10.2006
Offline
12
#15

[off]

Lupus:
Повторяю: приведенный вами пример полностью нерабочий, ни в per-dir ни в server-config контекстах (как ни удивительно ). И если вы намерены продолжать спор о его "абсолютной корректности", потрудитесь сперва его протестировать.

Протестировал (Apache 2.2.4) =) Полностью рабочий.

Lupus:
Хм. Оказывается для этих двух контекстов разные RewriteRule? И примеры в доках могут быть написаны специально для одного из них? ;)

Почти так. Уточняю: на этапе обработке правил, указанных для сервера (на уровне #'Main' server configuration# или внутри <VirtualHost>..</VirtualHost>, а не <Directory>..</Directory>) ведущие слэши присутствуют в обрабатываемом url.

Мануал - вещь хорошая, не стоит его недооценивать и переоценивать свои знания ;)

[/off]

Lupus
На сайте с 02.11.2002
Offline
241
#16
NA Кролик-Зануда:
Протестировал (Apache 2.2.4)

На 2-м не проверял. Ограничился тем, из документации к которому пример взят.

И, кстати, проблемы которого здесь обсуждаются.

NA Кролик-Зануда:
Уточняю: на этапе обработке правил, указанных для сервера (на уровне #'Main' server configuration# или внутри <VirtualHost>..</VirtualHost>, а не <Directory>..</Directory>) ведущие слэши присутствуют в обрабатываемом url.

Это интересно, конечно, но тогда вам придется отказаться от VirtualHost и использовать демократическое правило "каждому сайту по отдельному апачу" потому, что для витруальных хостов эти правила никак не действуют. Рассказать, почему или сами догадаетесь? ;)

NA Кролик-Зануда:
Мануал - вещь хорошая, не стоит его недооценивать и переоценивать свои знания

Если у меня возникают сомнения в мануале, я предпочитаю читать исходники. И вам советую. ;)

На сайте с 18.10.2006
Offline
12
#17
Lupus:
Это интересно, конечно, но тогда вам придется отказаться от VirtualHost и использовать демократическое правило "каждому сайту по отдельному апачу" потому, что для витруальных хостов эти правила никак не действуют. Рассказать, почему или сами догадаетесь? ;)

Расскажите, пожалуйста!

Проверил на 1.3.12 - работает

Lupus:
Если у меня возникают сомнения в мануале, я предпочитаю читать исходники. И вам советую. ;)

Как это забавно, однако =) mod_rewrite написали в 1997 году. Мануал по нему, написанный автором mod'а, висит на официальном сервере Apache уж почти лет 10. Этот мануал почти дословно (и примеры тоже) перекачевал в мануал по версии 2. Либо за все это время ни один разработчик/пользователь Apache не углядел ошибок в нем, либо все это знают, но не торопятся исправлять. Либо... ;)

Lupus
На сайте с 02.11.2002
Offline
241
#18
NA Кролик-Зануда:
Проверил на 1.3.12 - работает

В main server configuration? Это единственный контекст, в котором регэксп ^/$ срабатывает.

NA Кролик-Зануда:
Как это забавно, однако =) mod_rewrite написали в 1997 году. Мануал по нему, написанный автором mod'а, висит на официальном сервере Apache уж почти лет 10. Этот мануал почти дословно (и примеры тоже) перекачевал в мануал по версии 2. Либо за все это время ни один разработчик/пользователь Apache не углядел ошибок в нем, либо все это знают, но не торопятся исправлять. Либо...

Аппеляция к авторитетам, как аргумент в споре. Знакомо. :D

Это не ошибка, строго говоря. Это исключительно теоретический пример, который в нормальном, рабочем сервере использовать никто не будет. И, между прочим, не имеющий никакого отношения к обсуждаемой конфигурации. Ни в виртуалхосте, ни в .htaccess, это правило не работает и работать не может.

Lupus
На сайте с 02.11.2002
Offline
241
#19

Упс. Признаю свою ошибку. Если мы выносим обработку за контекст директории, функция замены пути будет обойдена. Следовательно, это правило в таком случае работает. Ну что-ж. Главное не избегать ошибок, а признавать их. :)

Тем не менее, к обсуждаемой конфигурации этот пример не относится никак и спор, возникший после вашего неоправданного упрека ostmaster, носит исключительно теоретический характер.

ЗЫ. А исходники рулят. В них все куда однозначнее, чем в доках. :)

M
На сайте с 13.03.2007
Offline
0
#20
Lupus:
А там, похоже, с errorpage наворочено.

А с виду не заметно

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий