web-dev-qa-db-fra.com

Existe-t-il un moyen de bloquer l'accès aux composants en utilisant une URL non-SEF?

Mon client se rend compte que nous pouvons accéder aux composants de Joomla en utilisant une URL non-SEF, même lorsque SEF est activé.

Il n'aime pas ça, car sans Itemid dans l'URL, la page est en désordre. Par exemple, http://www.joomla.org/index.php?option=com_content est ce qu'il ne veut pas que les gens voient sur son site.

Existe-t-il un moyen de bloquer l'accès au site en utilisant des URL non-SEF lorsque SEF est activé dans la configuration globale?

7
Hung Tran

Vous pouvez créer un plugin système avec ce code:

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);
    }
}

Donc, si nous avons quelque chose après le point d'interrogation ?, il génère une erreur 404.

Au lieu de cela, jetez une erreur 404, vous pouvez rediriger l'utilisateur vers la page d'accueil si vous le souhaitez.

Edit:

Si vous voulez autoriser certaines extensions à utiliser un point d'interrogation, vous pouvez faire:

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);
    }
}

Si l'itinéraire actuel ne comporte pas de menu associé, une erreur 404 est générée.

6
csbenjamin

Mais comment les visiteurs occasionnels devineront-ils jamais les URL non-SEF et les utiliseront-ils au lieu de celui de SEF, afin de pouvoir obtenir la vue modèle désordonnée?

Quoi qu'il en soit, une façon d'éviter cela consiste à utiliser une extension SEF tierce, qui traduira toujours un fichier non-SEF en une URL SEF correspondante. Les visiteurs ne verront pas le non-sef dans la barre d'adresse du navigateur.

Mais le problème avec le modèle malpropre ne disparaîtra pas. Je suppose que ce problème est dû au fait qu’un élément de menu différent ou aucun élément de menu est pris en compte lors de l’affichage des pages. Ainsi, tous les suffixes css, modules ou autres éléments spéciaux destinés à ces pages seront gérés correctement.

Pour éliminer ce problème, vous devez affecter ces pages à l'élément de menu souhaité.

2
FFrewin

Ma recommandation serait d'utiliser sh404sef et de toujours épingler un itemid à des URL sans un. Voir "Gestion des identifiants" dans le cadre de sa configuration:

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

1
Chad Windnagle