如何从外部代码在 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 正确的路径,无论外部代码来自何处。