если в адресной строке, например, domain.ru/var1/var2/var3/... имя var1 содержит символы < или > или " или | или : или пробел, то вылезает forbidden и его никак не контроллирую. Причем происходит это только в том случае если предыдущее имя является реальным каталогом, а не виртуальным.
мой htaccess
RewriteEngine on
Options +FollowSymlinks
#Отлавливаю в URI двойную кавычку
RewriteCond %{REQUEST_URI} \"
RewriteRule .* /error.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php [L]
на примерах:
В адресной строке domain.ru/var1/var2/var3/
1) domain.ru - всегда реальный. Остальные каталоги виртуальные, поэтому если написать domain.ru/va"r1/var2/var3/ - то вылетит forbidden. Если написать domain.ru/var1/va"r2/var3/ - то вылетит мой error.php, в котором я делаю что хочу. Далее кавычка обрабатывается нормально.
2) domain.ru - всегда реальный и например пусть var1 тоже реальный, тогда domain.ru/va"r1/var2/var3/ - то вылетит forbidden. domain.ru/var1/va"r2/var3/ - то вылетит forbidden. domain.ru/var1/var2/va"r3/ - то вылетит мой error.php. Далее кавычка обрабатывается нормально.
Возможно у меня в настройках апача где-то косяк, но где ума не приложу. Выручайте.
PS Вместо двойной кавычки можно подставить символ < или > или | или : или пробел проблема для них такая же.
Спустя 5 часов, 25 минут, 54 секунды (5.04.2011 - 23:14) VELIK505 написал(а):
Судя по всему у вас 404 ая не настроена правильно.
Если конечно var1 var2 var3 не существует.
404ую как отдаёшь?
Если конечно var1 var2 var3 не существует.
404ую как отдаёшь?
Спустя 19 часов, 28 минут, 41 секунда (6.04.2011 - 18:43) 3371 написал(а):
VELIK505 спасибо что откликнулись.
Немного не понял вопрос про где отдаешь 404.
Вообщем 404 должен выплевывать грубо говоря индекс.пхп, который получает и обрабатывает REQUEST_URI. Но дело в том, что когда проблемные символы появляются в имя_2 адреса <имя1_реальный каталог>/<имя_2 виртуальный>/ то дело даже до индекса не доходит, а сразу вылетает форбиден.
htaccess тоже не ловит такие символы.
А где надо производить настройку 404?
Немного не понял вопрос про где отдаешь 404.
Вообщем 404 должен выплевывать грубо говоря индекс.пхп, который получает и обрабатывает REQUEST_URI. Но дело в том, что когда проблемные символы появляются в имя_2 адреса <имя1_реальный каталог>/<имя_2 виртуальный>/ то дело даже до индекса не доходит, а сразу вылетает форбиден.
htaccess тоже не ловит такие символы.
А где надо производить настройку 404?
Спустя 22 минуты, 48 секунд (6.04.2011 - 19:05) 3371 написал(а):
Еще момент. Если RewriteRule все закомментировать и использовать ErrorDocument 404 /error.php то реакция аналогична. Когда когда в адресе несуществующий каталог, то вылетает error.php, если проблемный символ в следующем за реальным каталогом, то форбидден.
Спустя 7 минут, 30 секунд (6.04.2011 - 19:13) VELIK505 написал(а):
У тебя свич обработка? Дай ссылку на сайт посмотреть
Спустя 4 минуты, 18 секунд (6.04.2011 - 19:17) 3371 написал(а):
Да нет. Я даже обработку не дописал, потому что данные не доходят до индекса, а форбиден вылетает.
На локалхосте тестирую.
На локалхосте тестирую.
Спустя 6 минут, 32 секунды (6.04.2011 - 19:24) Игорь_Vasinsky написал(а):
может регулярки не правильно сопоставляет реальный URL и ЧПУ? от этого и 404
Спустя 16 минут, 36 секунд (6.04.2011 - 19:40) 3371 написал(а):
нее. вы не правильно мою проблему поняли.
тут все каталоги виртуальные за исключением естественно корневого
http://test.ru/cla%22s/asd/asd вылетает forbidden
http://test.ru/clas/as%22d/asd вылетает сообщение из моего error.php (htaccess в первом посте)
http://test.ru/clas/asd/as%22d вылетает сообщение из моего error.php
тут все каталоги виртуальные за исключением естественно корневого и class
http://test.ru/class/a%22sd/asd вылетает forbidden
http://test.ru/class/asd/as%22d вылетает сообщение из моего error.php
улавливаете закономерность?
тут все каталоги виртуальные за исключением естественно корневого
http://test.ru/cla%22s/asd/asd вылетает forbidden
http://test.ru/clas/as%22d/asd вылетает сообщение из моего error.php (htaccess в первом посте)
http://test.ru/clas/asd/as%22d вылетает сообщение из моего error.php
тут все каталоги виртуальные за исключением естественно корневого и class
http://test.ru/class/a%22sd/asd вылетает forbidden
http://test.ru/class/asd/as%22d вылетает сообщение из моего error.php
улавливаете закономерность?
Спустя 6 минут, 42 секунды (6.04.2011 - 19:47) Игорь_Vasinsky написал(а):
да вижу. тока откуда пробелы...
если пробел в имени виртуального каталога в ральном - то 403
если название с пробелом в виртуальн. каталога,который в виртуальном - 404
для справки
Ошибка 403 (Forbidden, доступ запрещен)
может возникнуть по одной из нескольких причин:
Вы выложили на сервер неправильный индексный файл. Файл главной страницы вашего сайта должен называться index.shtml, index.html, index.htm, index.phtml или index.php. Обратите внимание: все символы должны быть в нижнем регистре (В отличие от Windows, в ОС Linux, под управлением которой работает сервер, регистр имен файлов имеет значение, и файлы index.html и Index.html — это два абсолютно разных файла).
Вы выставили неправильные права на папку, в которой находится запрашиваемый файл, или на какую-либо из ее родительских директорий. Все эти директории должны предоставлять права на выполнение (x) для владельца.
Вы загрузили файлы сайта в неправильную папку. Войдите в свою контрольную панель в раздел «Домены / Мои домены» и посмотрите, что написано в столбце «Папка» напротив интересующего вас домена. Именно в эту папку и нужно загружать файлы сайта.
Если вы считаете, что все правила, приведенные выше, соблюдены, но ошибка 403 все равно возникает, обратитесь в техподдержку.
если пробел в имени виртуального каталога в ральном - то 403
если название с пробелом в виртуальн. каталога,который в виртуальном - 404
для справки
Ошибка 403 (Forbidden, доступ запрещен)
может возникнуть по одной из нескольких причин:
Вы выложили на сервер неправильный индексный файл. Файл главной страницы вашего сайта должен называться index.shtml, index.html, index.htm, index.phtml или index.php. Обратите внимание: все символы должны быть в нижнем регистре (В отличие от Windows, в ОС Linux, под управлением которой работает сервер, регистр имен файлов имеет значение, и файлы index.html и Index.html — это два абсолютно разных файла).
Вы выставили неправильные права на папку, в которой находится запрашиваемый файл, или на какую-либо из ее родительских директорий. Все эти директории должны предоставлять права на выполнение (x) для владельца.
Вы загрузили файлы сайта в неправильную папку. Войдите в свою контрольную панель в раздел «Домены / Мои домены» и посмотрите, что написано в столбце «Папка» напротив интересующего вас домена. Именно в эту папку и нужно загружать файлы сайта.
Если вы считаете, что все правила, приведенные выше, соблюдены, но ошибка 403 все равно возникает, обратитесь в техподдержку.
Спустя 2 минуты, 10 секунд (6.04.2011 - 19:49) Игорь_Vasinsky написал(а):
с какого то хостинга справочка...
Спустя 24 минуты, 50 секунд (6.04.2011 - 20:14) 3371 написал(а):
Вообщем сейчас на хостинге потестировал. На нем все нормально, а вот у меня на локалхосте эта проблема никуда не делась.
Поэтому скорее всего надо апач смотреть, а что именно не знаю.
Поэтому скорее всего надо апач смотреть, а что именно не знаю.
Спустя 22 часа, 58 минут, 22 секунды (7.04.2011 - 19:12) VELIK505 написал(а):
Вот именно поэтому и надо Локалку (денвер) вынести в отдельную рубрику! Создать отдельную рубрику!
Сервак это одно а локалка это другое!
Сервак это одно а локалка это другое!
Спустя 20 минут, 11 секунд (7.04.2011 - 19:33) 3371 написал(а):
У меня не денвер.
Сейчас на багзилле нашел описание похоже как раз моей проблеммы.
https://issues.apache.org/bugzilla/show_bug.cgi?id=41441
Обратите внимание на последние несколько постов. Случай 1 в 1.
Правда в английском не сильно силен поэтому решение проблемы пока не нашел.
Кстати вывел на эту ссылку анализ лога ошибок. А именно вот эта ошибка: (20024)The given path is misformatted or contained invalid characters: Cannot map GET /sdf%22sdf/sdf HTTP/1.1 to file
%22 - это " (двойная кавычка).
Сейчас на багзилле нашел описание похоже как раз моей проблеммы.
https://issues.apache.org/bugzilla/show_bug.cgi?id=41441
Обратите внимание на последние несколько постов. Случай 1 в 1.
Правда в английском не сильно силен поэтому решение проблемы пока не нашел.
Кстати вывел на эту ссылку анализ лога ошибок. А именно вот эта ошибка: (20024)The given path is misformatted or contained invalid characters: Cannot map GET /sdf%22sdf/sdf HTTP/1.1 to file
%22 - это " (двойная кавычка).