ip.board 3.4.5: скрипт (admin/index.php) генерирует 404 ошибку - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

Правила раздела

Здесь обсуждаются вопросы по настройке и администрированию форумов IPB 3.x.
Пожалуйста, не оффтопьте, если зашли сюда случайно, и обратите внимание на соседние разделы.
Установка, настройка и обслуживание форумов IPB 2.x.
Оформление форумов, включая верстку скинов.
Размещение рекламы на форумах.
SEO оптимизация форума.
Техническая поддержка наших скинов и модов.

СвернутьПрикрепленные теги

Теги не найдены

Страница 1 из 1

ip.board 3.4.5: скрипт (admin/index.php) генерирует 404 ошибку

#1 Пользователь не на сайте   cyrax_02 ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 136
  • Регистрация: 19-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 03 Ноябрь 2016 - 02:10

Перенёс сайт с форумом на новый VPS. Путь расположения сайта изменился. В корневом conf_global.php все пути поправил.
Результат: форум работает нормально, вход по паролю тоже работает без проблем.

Но при попытке входа в админку получаем 404 ошибку. Но не от веб-сервера, а от главного админского скрипта - admin/index.php:

Цитата

Ошибка 404: запрошенная страница не найдена
[#404]
К сожалению, не удалось найти запрашиваемую вами страницу. Пожалуйста вернитесь на главную страницу форума.
Полезные ссылки
Разделы помощи
Связь с администрацией форума


404 ошибку возвращает вот этот фрагмент кода из метода ipsRegistry::init()
/* Have we entered an incorrect FURL that has no match? */
if ( ipsRegistry::$settings['use_friendly_urls'] AND self::$_noFurlMatch === true )
{
	self::getClass('output')->showError( 'incorrect_furl', 404, null, null, 404 );
}
else if( isset(ipsRegistry::$request['act']) AND ipsRegistry::$request['act'] == 'rssout' )
{
	self::getClass('output')->showError( 'incorrect_furl', 404, null, null, 404 );
}

Дальше отслеживать вызовы сил не хватило. Без phpStorm - это какое-то извращение...
Поле $_noFurlMatch мне ни о чём не говорит...

Возможные причины:
1. Где-то в глубине админки прямо прописаны старые пути к админке
2. Из-за неочищенного кэша (только как его очистить (вернее, что именно чистить) без доступа в админку ?)
0

#2 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 735
  • Регистрация: 20-Март 09
  • Репутация: 2 273
  • IPB version:3.1.x
 

Отправлено 03 Ноябрь 2016 - 02:17

Просмотреть сообщениеcyrax_02 сказал(а):

Без phpStorm - это какое-то извращение.

Только блокнот, только хардкор.

Просмотреть сообщениеcyrax_02 сказал(а):

404 ошибку возвращает вот этот фрагмент кода из метода ipsRegistry::init()

В админке нет чпу. Перезалейте еще раз папку admin и проверьте куда форма авторизации отправляет запрос.
0

#3 Пользователь не на сайте   cyrax_02 ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 136
  • Регистрация: 19-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 03 Ноябрь 2016 - 03:10

Цитата

В админке нет чпу. Перезалейте еще раз папку admin и проверьте куда форма авторизации отправляет запрос.

До авторизации в админке дело не доходит. Админский скрипт сразу возвращает свою 404 ошибку.

Что имеем:
1) Запускается админский скрипт admin/index.php
2) Этот скрипт запускает мой единственный собственный хук (который не должен запускаться в админке)
3) Настройка ipsRegistry::$settings['use_friendly_urls'] действительно включена => url, естественно, и не находится

Т.е. проблема локализуется в нечто, что заставляет работать этот админский скрипт как обычный форумовский. Вернее, окружение этот скрипт получает форумовское...
0

#4 Пользователь не на сайте   cyrax_02 ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 136
  • Регистрация: 19-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 03 Ноябрь 2016 - 03:24

Цитата

В админке нет чпу. Перезалейте еще раз папку admin

Сверил с оригинальным дистрибутивом - те же самые файлы в /admin. Т.е. в коде /admin/sources/base/ipsRegistry.php действительно идёт проверка на дружественные url. Согласен, что в коде админки дружественные url упоминаться не должны, но это факт. Такие исходники. И эти исходники на старом сервере работают нормально. На новом - глючат.

И управление передаётся именно админскому скрипту - /admin/index.php, а не главному форумовскому (/index.php).
Куки и кэш браузера полностью вычистил - та же самая проблема.

Сообщение изменено: cyrax_02 (03 Ноябрь 2016 - 03:26)

0

#5 Пользователь не на сайте   cyrax_02 ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 136
  • Регистрация: 19-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 03 Ноябрь 2016 - 03:55

die('<pre>'.print_r(ipsRegistry::$settings, true).'</pre>');
Получаем:
Array
(
    [b][base_url] => http://www.site.ru/forum/index.php?
    [_original_base_url] => http://www.site.ru/forum[/b]
    [b][this_url] => http://www.site.ru/forum/admin/[/b]
    [query_string_safe] => 
    [query_string_formatted] => 
    [b][_admin_link] => http://www.site.ru/forum/admin/index.php[/b]
    [su_max_chars] => 500
    [su_max_replies] => 100
    [su_enabled] => 1
    [fbc_xdlocation] => http://www.site.ru/community/interface/facebook/xd_receiver.php
    [fb_req_perms] => email,publish_stream,read_stream
    [js_main] => http://www.site.ru/forum/admin/js/
    [public_dir] => http://www.site.ru/forum/public/
    [cache_dir] => http://www.site.ru/forum/cache/
    [base_url_ns] => http://www.site.ru/forum/index.php?/index.php?
    [base_url_with_app] => http://www.site.ru/forum/index.php?app=forums&
    [js_base] => http://www.site.ru/forum/index.php?
    [img_url] => http://www.site.ru/forum/public/style_images/master
    [img_url_no_dir] => http://www.site.ru/forum/public/style_images/
    [public_cdn_url] => http://www.site.ru/forum/public/
    [css_base_url] => http://www.site.ru/forum/public/
    [js_base_url] => http://www.site.ru/forum/public/
    [emoticons_url] => http://www.site.ru/forum/public/style_emoticons/<#EMO_DIR#>
    [mime_img] => http://www.site.ru/forum/public
)

В этой переменной все пути корректные, за исключением пути к uploads. Где он прописывается - неизвестно, но после получения доступа к админке его можно будет без проблем подкорректировать из админки. В любом случае этот путь к проблеме отношения не имеет.

И самое главное - значение переменной:
[friends_enabled] => 1
Т.е. furl включены... В админке...
0

#6 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 735
  • Регистрация: 20-Март 09
  • Репутация: 2 273
  • IPB version:3.1.x
 

Отправлено 03 Ноябрь 2016 - 08:31

Проверьте права на папку админки и файла index.php. Возможно и то, что у папки не хватает необходимых прав на чтение или выполнение.
Чпу можете оставить в покое, он не причем. На работу админке он не влияет, а у вас отрабатывает не admin а front, т.е. сервер не может найти или получить доступ к /admin/index.php и считает этот адрес не существующем. Отключите реврайт в htaccess и скорее всего получите сообщение от сервера not found или forbiden.
0

#7 Пользователь не на сайте   cyrax_02 ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 136
  • Регистрация: 19-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 03 Ноябрь 2016 - 10:25

Цитата

Проверьте права на папку админки и файла index.php. Возможно и то, что у папки не хватает необходимых прав на чтение или выполнение.

Права в порядке - 755, владелец - пользователь, от имени которого запускаются процессы php-fpm.
Да и если бы не хватало прав на какие-то операции, в логах были бы соответствующие сообщения веб-сервера
Если искусственно ужать права на /admin/index.php до 0000, то начинаю получать в логах такое сообщение: .../admin/index.php" failed (13: Permission denied)

Цитата

у вас отрабатывает не admin а front, т.е. сервер не может найти или получить доступ к /admin/index.php и считает этот адрес не существующем.

Как fastcgi-сервер (php-fpm) не может найти или получить доступ к /admin/index.php, если этот скрипт физически выполняется. Именно /admin/index.php, а не front-овый /index.php. Ставлю в /admin/index.php в самом вверху строку "die("OK")" - перезагружаю веб-сервер - получаю в браузере "OK".

Цитата

Отключите реврайт в htaccess и скорее всего получите сообщение от сервера not found или forbiden.

У меня nginx. Отключил вообще все rewrite'ы в конфиге, перезагрузил nginx. Итог:
- при запросе .../forum/admin/ получаю ту же самую ошибку 404 (генерируемую скриптом /admin/index.php)
- при запросе .../forum/admin/index.php получаю 200 ответ, при этом загружается главная страница форума, но без всяких стилей и картинок

Т.е. что имеем:
1. Отрабатывает админский скрипт /forum/admin/index.php
2. Отрабатывает метод ipsRegistry::init() из файла /admin/sources/base/ipsRegistry.php
3. Отрабатывает вот этот фрагмент кода, возвращающий 404 ошибку:
/* Have we entered an incorrect FURL that has no match? */
if ( ipsRegistry::$settings['use_friendly_urls'] AND self::$_noFurlMatch === true )
{
    self::getClass('output')->showError( 'incorrect_furl', 404, null, null, 404 );
}
else...

Т.е. в момент выполнения этого кода либо furl должны быть отключены, либо для включенных furl он должен корректно находить furlMatch, но не находит...
0

#8 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 735
  • Регистрация: 20-Март 09
  • Репутация: 2 273
  • IPB version:3.1.x
 

Отправлено 03 Ноябрь 2016 - 10:37

Вы не в ту сторону смотрите. Этот код отрабатывает только для IPS_AREA public, оставьте в покое furl. Если он выполняется значит форум загружает фронтенд а не админ окружение. Еще раз проверьте название папки CP_DIRECTORY в initdata.php и сделайте дамп $_SERVER['PHP_SELF'].
1

#9 Пользователь не на сайте   cyrax_02 ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 136
  • Регистрация: 19-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 03 Ноябрь 2016 - 11:08

Замените фрагмент на admin - в моём сообщении и в своём. Это админка моя такая. Не углядел.
Больше не буду ничего выкладывать на форум - обязательно что-нибудь вылезет...
0

#10 Пользователь не на сайте   cyrax_02 ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 136
  • Регистрация: 19-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 03 Ноябрь 2016 - 12:58

Да, причина в PHP_SELF. Если эта переменная пуста, то админка начинает глючить, если равна /forum/admin/index.php, то работает нормально.

В свою очередь, при наличии заголовка PATH_INFO (т.е. если в конфигурации nginx прописать директиву fastcgi_param PATH_INFO ..., пусть даже с пустым значением) nginx (или php) принудительно устанавливает переменную PHP_SELF в PATH_INFO (если при этом в конфигурации nginx дополнительно прописать директиву fastcgi_param PHP_SELF ..., она будет перезаписана значением PATH_INFO) Если заголовок PATH_INFO fastcgi-серверу не передавать, то в переменную PHP_SELF nginx запишет корректное значение /forum/admin/index.php и админка будет работать корректно.

Т.е. для решения проблемы необходимо выполнить один из следующих пунктов:
а) включить (не отключать) php-опцию cgi.fix_pathinfo - в этом случае php присвоит переменной PHP_SELF корректное значение (равное SCRIPT_NAME), не зависимо от значения PATH_INFO. Но при этом может быть открыта вот эта уязвимость
б) передавать fastcgi-серверу переменную PATH_INFO со значением, равным SCRIPT_NAME. В этом случае будет иметь место нарушение спецификации
в) не передавать fastcgi-серверу переменную PATH_INFO - в этом случае nginx отправит fastcgi-серверу корректный PHP_SELF (равный SCRIPT_NAME)

Здесь самым "правильным" является 3-й вариант.
Возникает вопрос, можно ли решить проблему с отключенным cgi.fix_pathinfo и с передачей fastcgi-серверу пустого PATH_INFO ?
0

#11 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 735
  • Регистрация: 20-Март 09
  • Репутация: 2 273
  • IPB version:3.1.x
 

Отправлено 03 Ноябрь 2016 - 17:46

Используйте str_replace( substr( DOC_IPS_ROOT_PATH, 0, -1 ), '', $_SERVER['SCRIPT_FILENAME'] ) вместо $_SERVER['PHP_SELF'] (надеюсь $_SERVER['SCRIPT_FILENAME'] у вас настроен)
Или удалите это условие preg_match( "#/" . CP_DIRECTORY . "(/|$)#", $_SERVER['PHP_SELF'] ), там есть вторая часть с константой из АЦ для нормального определения окружения - ее в вашем случае будет достаточно.
0

#12 Пользователь не на сайте   cyrax_02 ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 136
  • Регистрация: 19-Февраль 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 05 Ноябрь 2016 - 01:25

Цитата

(надеюсь $_SERVER['SCRIPT_FILENAME'] у вас настроен)

Настроен. Только исходники менять нельзя. Некошерно это (после очередного обновления всё затерётся).

Остановился вот на этом варианте:
в) не передавать fastcgi-серверу переменную PATH_INFO - в этом случае nginx отправит fastcgi-серверу корректный PHP_SELF (равный SCRIPT_NAME)

Всё-таки, обозначенная проблема (пустой PHP_SELF) - это проблема взаимодействия nginx и php-fpm, но никак не проблема IP.Board.
PHP_SELF должен передаваться fastcgi-серверу, согласно спецификации.
0

#13 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 735
  • Регистрация: 20-Март 09
  • Репутация: 2 273
  • IPB version:3.1.x
 

Отправлено 05 Ноябрь 2016 - 08:57

Обновится осталось только еще на одну, последнию версию. Дальше идет четверка с другой структурой. Конечно, по хорошему нужно правильно настраивать веб-сервер. Но как временное решение пойдет и небольшая правка, главное чтобы ац сейчас заработал.
0

Сообщить об этой теме:


Страница 1 из 1


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2016 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна