Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / (.htaccess) Странный редирект. Часть 1 / 6 сообщений из 6, страница 1 из 1
28.01.2015, 19:45
    #38865923
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(.htaccess) Странный редирект. Часть 1
Провёл вот такой эксперимент. В корне сайта создал файл test (без расширения).
Далее там же (в корне сайта) создаю .htaccess со следующим редиректом:
Код: sql
1.
2.
3.
4.
5.
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(test|test\/.*)$ index.php [L,QSA]

Этот редирект любые запросы /test или /test/... к несуществующим файлам и папкам должен перенаправлять на главную страницу сайта.

Что в итоге наблюдаем:
При запросе страницы www.site.ru/test/ либо www.site.ru/test (в последнем случае браузер сам добавляет слэш после "test") получаем стандартную 404 страницу Apache. Т.е. наш редирект не сработал.

Если убрать директивы
Код: sql
1.
2.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

то наш редирект начинает работать - идёт перенаправление на главную страницу сайта.

Вопрос: какого хрена происходит ?
Если Apache считает, что запрошенной папки test/ не существует, то почему не срабатывают директивы RewriteCond %{REQUEST_FILENAME} !-f и RewriteCond %{REQUEST_FILENAME} !-d (не выполняется редирект на главную страницу сайта) ?
Если же Apache считает, что запрошенная папка/файл test/ существует, то почему не выводится содержимое файла test ? (вместо этого загружается 404 страница).
Ну ведь надо же как-то определиться... Или нет ?
...
Рейтинг: 0 / 0
28.01.2015, 19:56
    #38865928
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(.htaccess) Странный редирект. Часть 1
Проверил в Firefox, Safari и Chrome - поведение одинаково. С той лишь разницей, что Safari не добавляет слэш после test (впрочем, это должно регулироваться настройками).
...
Рейтинг: 0 / 0
28.01.2015, 20:14
    #38865934
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(.htaccess) Странный редирект. Часть 1
Слеш в конце означает, что последний компонент пути является директорий, в которой пойдёт обращение к индексному файлу. Таким образом, выходит, что файл test и не запрашивается. А вот почему браузер "сам" добавил слеш в конце - это вопрос. Думаю, что ему кто-то помог.
...
Рейтинг: 0 / 0
28.01.2015, 20:20
    #38865937
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(.htaccess) Странный редирект. Часть 1
Также обратил внимание, что в Safari (который "не добавляет слэш в конце файлов без расширения" ) наблюдается такая картина:

1) Если в корне сайта лежит файл test , то запрос www.site.ru/test (без слэша) остаётся без изменений (загружается содержимое файла)
2) Если в корне сайта лежит файл test , то запрос www.site.ru/test/ (со слэшем) изменяется на www.site.ru/test (без слэша) и загружается содержимое файла

3) Если в корне сайта лежит каталог test/ , то запрос www.site.ru/test/ (со слэшем) остаётся без изменений
4) Если в корне сайта лежит каталог test/ , то запрос www.site.ru/test (без слэша) тоже остаётся без изменений (загружается стандартная 404 страница)

Данное поведение можно объяснить только тем, что в случае запроса каталога www.site.ru/test/ (со слэшем) веб-сервер проверяет наличие каталога и если его нет, но есть одноимённый файл, возвращает клиенту (браузеру) редирект из 300-й серии на одноимённый файл www.site.ru/test (без слэша). Далее браузер сразу же отправляет новый запрос уже без слэша.

Если это действительно так (веб-сервер в указанном случае отправляет клиенту редирект из 300-й серии), то почему этого не происходит в случае с Firefox и Chrome ? В этих браузерах поведение идентично Safari, но в адресной строке слэш "не убирается" (при наличии одноимённого файла на сервере).
...
Рейтинг: 0 / 0
28.01.2015, 20:30
    #38865944
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(.htaccess) Странный редирект. Часть 1
авторА вот почему браузер "сам" добавил слеш в конце - это вопрос. Думаю, что ему кто-то помог.
Проверил. Получается так. Некоторые браузеры (возможно, - настройки) к файлам без расширения добавляют слэш (сразу же, перед отправкой запроса серверу). Некоторые браузеры - не добавляют.
В результате, к файлу без расширения (физически существующему на сервере) можно получить доступ только через те браузеры, которые не добавляют слэш к файлам без расширения (в данном случае - Safari).

Но одновременно с этим работает и редирект веб-сервера из 300 серии на тот же адрес без слэша, если вместо каталога существует одноимённый файл (поведение описал в предыдущем посте). В этом случае слэш убирается не сразу, а через долю секунды (проходит время на получение редиректа от сервера).

Т.е. одновременно работают оба этих "механизма". В итоге понимание логики слэшей существенно усложняется...
...
Рейтинг: 0 / 0
28.01.2015, 20:37
    #38865949
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(.htaccess) Странный редирект. Часть 1
На текущий момент остаются нерешёнными вот эти 2 вопроса:

Вопрос 1
авторНо одновременно с этим работает и редирект веб-сервера из 300 серии на тот же адрес без слэша, если вместо каталога существует одноимённый файл (поведение описал в предыдущем посте). В этом случае слэш убирается не сразу, а через долю секунды (проходит время на получение редиректа от сервера).Тогда почему в указанном случае (вместо каталога существует одноимённый файл) в Firefox и Chrome слэш не убирается и содержимое файла test не отображается (вместо этого получаем 404 страницу) ?
Не может же веб-сервер отправлять этот редирект браузеру Safari, но не отправлять браузерам Firefox и Chrome...

Вопрос 2 (из первого поста)
Если Apache считает, что запрошенной папки test/ не существует, то почему не срабатывают директивы RewriteCond %{REQUEST_FILENAME} !-f и RewriteCond %{REQUEST_FILENAME} !-d (не выполняется редирект на главную страницу сайта) ?
Если же Apache считает, что запрошенная папка/файл test/ существует, то почему не выводится содержимое файла test ? (вместо этого загружается 404 страница).
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / (.htaccess) Странный редирект. Часть 1 / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]