Есть ли способ заблокировать доступ к компонентам с помощью URL-адреса, отличного от SEF?

Мой клиент понимает, что мы можем получить доступ к компонентам в Joomla, используя URL-адрес, отличный от SEF, даже если SEF включен.

Ему это не нравится, потому что без Itemid в URL-адресе страница грязная. Например, http://www.joomla.org/index.php?option=com_content - это то, что он не хочет, чтобы люди видели на своем сайте.

Можно ли заблокировать доступ к сайту с помощью URL-адресов, отличных от SEF, когда SEF включен в глобальной конфигурации?

cms
7 голосов | спросил Hung Tran 26 PMpSat, 26 Apr 2014 19:03:00 +040003Saturday 2014, 19:03:00

3 ответа


6

Вы можете создать системный плагин с помощью этого кода:

public function onAfterInitialise(){
    $app = JFactory::getApplication();
    $config = JFactory::getConfig();
    $uri = JUri::getInstance();
    if($config->get("sef") && $app->isSite() && $uri->getQuery()){
        throw new Exception("Not Found", 404);
    }
}

Итак, если у нас есть что-нибудь после вопросительного знака ?, он выдает ошибку 404.

Вместо того, чтобы сбросить ошибку 404, вы можете перенаправить пользователя на домашнюю страницу, если хотите.

Edit:

Если вы хотите, чтобы какое-то расширение использовало знак вопроса, вы можете сделать:

public function onAfterRoute(){
    $app = JFactory::getApplication();
    $config = JFactory::getConfig();
    $menu = $app->getMenu();
    if($config->get("sef") && $app->isSite() && !$menu->getActive()){
        throw new Exception("Not Found", 404);
    }
}

Если текущий маршрут не имеет связанного с ним меню, он выдает ошибку 404.

ответил csbenjamin 26 PMpSat, 26 Apr 2014 19:37:43 +040037Saturday 2014, 19:37:43
2

Но как случайные посетители будут когда-либо догадываться о URL-адресах, отличных от SEF, и использовать их вместо SEF, чтобы они могли получить беспорядочное представление шаблона?

Во всяком случае, один из способов избежать этого - использовать стороннее расширение SEF, которое всегда будет переводить не-SEF в соответствующий URL SEF. Посетители не будут видеть не-sef в адресной строке браузера.

Но проблема с грязным шаблоном не исчезнет. Я предполагаю, что эта проблема связана с тем, что при просмотре страниц вообще не рассматривается какой-либо элемент меню или нет элемента меню, поэтому любые css-суффиксы, модули или другие специальные вещи, предназначенные для этих страниц, будут обрабатываться правильно.

Чтобы устранить эту проблему, вам необходимо назначить эти страницы в нужный пункт меню.

ответил FFrewin 26 PMpSat, 26 Apr 2014 19:39:51 +040039Saturday 2014, 19:39:51
1

Моей рекомендацией было бы использовать sh404sef и всегда связывать itemid с URL-адресами без него. См. «Управление идентификатором элемента» как часть его конфигурации:

http://anything-digital.com/sh404sef/docs/configuration.html

ответил Chad Windnagle 26 PMpSat, 26 Apr 2014 23:10:58 +040010Saturday 2014, 23:10:58

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132