Ссылка на внешний файл в Joomla - работает только в тесте
У меня очень острая проблема с Joomla 2.5, и я не могу найти никакого ответа. У меня есть страница с некоторыми ссылками. Каждая ссылка похожа на www.myhost.com/joomla/custom_dev/myscript.php?foo=bar. myscript.php - это внешний скрипт, который не является частью Joomla, но мне нужна среда Joomla для некоторых функций.
Поэтому я использую классический код:
// Get Joomla! framework
define( '_JEXEC', 1 );
define( '_VALID_MOS', 1 );
define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../../'));
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
Он отлично работает в моей тестовой среде.
Но на живом сервере я получил ошибку 404. С FireBug я увидел, что ссылка на внешний файл вообще не работает: он переходит к перенаправлению 303, затем к ошибке 404. Я перепробовал много вещей... и теперь я нашел, что вызывает эту проблему:
$mainframe->initialise();
Без этой строки перенаправления нет и ссылка работает. Но у меня нет рамочных функций (а они мне нужны!).
Я также пытался получить доступ непосредственно к своему сценарию.
www.myhost.com/joomla/custom_dev/myscript.php?foo=bar с $mainframe->initialise() -> получил ошибку 404 (вызванную многими перенаправлениями 303)
www.myhost.com/joomla/custom_dev/myscript.php?foo=bar без $mainframe->initialise() -> без ошибок, отображает то, что может отображаться без фреймворка Joomla...
Я надеюсь, что я был достаточно ясен!
РЕДАКТИРОВАТЬ: я удалил свою пользовательскую страницу 404, и истинная причина 404 заключается в том, что категория не найдена. Когда я пробую www.myhost.com/joomla/custom_dev/another_script.php, у меня нет ошибок.
РЕДАКТИРОВАТЬ 2: Еще одна информация: кажется, что когда я использую $mainframe->initialise(), он автоматически добавляет язык где-то в моем URL, так что он становится www.myhost.com/joomla/custom_dev/en/myscript.php?foo= бар
1 ответ
Попробуйте использовать это с несколькими изменениями и удалениями:
define('_JEXEC', 1);
define('JPATH_BASE', realpath(dirname(__FILE__)));
require_once ( JPATH_BASE .'/includes/defines.php' );
require_once ( JPATH_BASE .'/includes/framework.php' );
require_once ( JPATH_BASE .'/libraries/joomla/factory.php' );