如何从外部代码在 Joomla 中获得正确的 URL?
How to get correct URL in Joomla from external code?
我正在从一些外部代码访问 Joomla 框架,如 this answer 中所示。网站在http://localhost/joomla/
,外部代码在http://localhost/joomla/external/index.php
我已将 JPATH_BASE
正确设置为 Joomla 根目录,并生成如下 URL:
JRoute::_('index.php?option=com_users&view=login')
但是返回 URL /joomla/external/index.php/login
而不是它应该是什么:/joomla/index.php/login
如何解决这个问题?
编辑:明确地说,我正在寻找适用于任何文件夹结构的通用解决方案。外部文件夹可以在另一个位置,例如http://localhost/external/
你可以做的是,trim 从基数 URL 末尾开始的尾随字符串,并在 JRoute
中使用它,就像这样:
$base = rtrim(JUri::base(), JUri::base(true));
JRoute::_($base . '/index.php?option=com_users&view=login');
视觉目的测试:
$base = JUri::base();
$baseTrue = JUri::base(true);
$baseRoot = rtrim($base, $baseTrue);
var_dump($base);
var_dump($baseTrue);
var_dump($baseRoot);
var_dump(JRoute::_($baseRoot . '/index.php?option=com_users&view=login'));
输出:
> 'http://example.loc/media/' (length=24)
> '/media' (length=6)
> 'http://example.loc' (length=17)
> 'http://example.loc/index.php?option=com_users&view=login' (length=55)
注意:/media
只是我将独立的 PHP 文件放在
中的目录
终于想出了一个解决方案 - 我需要在 configuration.php
文件中设置站点的基础 URL:
public $live_site = 'http://localhost/joomla/';
现在调用 JRoute::_
returns 正确的路径,无论外部代码来自何处。
我正在从一些外部代码访问 Joomla 框架,如 this answer 中所示。网站在http://localhost/joomla/
,外部代码在http://localhost/joomla/external/index.php
我已将 JPATH_BASE
正确设置为 Joomla 根目录,并生成如下 URL:
JRoute::_('index.php?option=com_users&view=login')
但是返回 URL /joomla/external/index.php/login
而不是它应该是什么:/joomla/index.php/login
如何解决这个问题?
编辑:明确地说,我正在寻找适用于任何文件夹结构的通用解决方案。外部文件夹可以在另一个位置,例如http://localhost/external/
你可以做的是,trim 从基数 URL 末尾开始的尾随字符串,并在 JRoute
中使用它,就像这样:
$base = rtrim(JUri::base(), JUri::base(true));
JRoute::_($base . '/index.php?option=com_users&view=login');
视觉目的测试:
$base = JUri::base();
$baseTrue = JUri::base(true);
$baseRoot = rtrim($base, $baseTrue);
var_dump($base);
var_dump($baseTrue);
var_dump($baseRoot);
var_dump(JRoute::_($baseRoot . '/index.php?option=com_users&view=login'));
输出:
> 'http://example.loc/media/' (length=24)
> '/media' (length=6)
> 'http://example.loc' (length=17)
> 'http://example.loc/index.php?option=com_users&view=login' (length=55)
注意:/media
只是我将独立的 PHP 文件放在
终于想出了一个解决方案 - 我需要在 configuration.php
文件中设置站点的基础 URL:
public $live_site = 'http://localhost/joomla/';
现在调用 JRoute::_
returns 正确的路径,无论外部代码来自何处。