1

SEOに適したURLを有効にしました。基本的に、私のアプリのURLは次のようになります: http://x.com/enまたはhttp://x.com/en/gallery

私のアプリからは、たとえばcom_usersにリンクがありません。ただし、ユーザーは次のURLのいずれかを使用して開くことができます:http://x.com/component/usersまたはhttp://x.com/?option=com_banners

私はこれで最初のものをブロックしました:

RewriteCond %{REQUEST_URI} /component/ [NC]
RewriteRule ^.*$ - [F,L]

2番目(?option = com_users)をブロックするにはどうすればよいですか?

この動作はデフォルトであり、Joomlaで予想されるものである可能性があることを理解していますが、1つの例を示したいと思います。

登録ユーザーのみにすべてのページへのアクセスを許可した場合でも、コンポーネントにアクセスできます。同時に、Joomlaの管理には読み取りの許可がありません。最後に、com_contentからの記事など、公開されている場合、ユーザーはテンプレートページまたは一部のデータを取得しています。そして質問:この場合、403を上げる方法、または少なくとも/にリダイレクトする方法は?

更新: / users?view = registerrationをブロックし、リマインダーとプロファイルをリセットする必要があります。そして、エラーをログインページにリダイレクトする必要があります。それがJoomlaコンポーネント全体であるか、ビュー、タスクなどであるかは関係ありません。

4

2 に答える 2

1

別の方法で、これにはrel=canonicalを使用します。

タグはすべての「ページバージョン」に表示され、多くのケース固有のルールを設定したり、ヒーブリダイレクトファイルを持ち歩いたりする必要がないため、これははるかに簡単で優れた方法です...

これは、canoniczlizationを支援するプラグインの1つにすぎません。

http://extensions.joomla.org/extensions/site-management/seo-a-metadata/meta-data/11038?qh=YTo0OntpOjA7czo5OiJjYW5vbmljYWwiO2k6MTtzOjExOiInY2Fub25pY2FsJyI7aToyO3M6

于 2012-08-15T09:49:50.083 に答える
1

すべてのケースを処理し、不便な場合にログインページ(/ login)にリダイレクトする独自のプラグインを作成しました。不便とは、Joomla、403、404のコンポーネントに直接アクセスすることを意味しますが、500は使用しません。今のところ、私のアプリケーションは、/ login、/ home、/ gallery、/ gallery /album/のURLのみを受け入れて非常にうまく機能します。いずれか、および他のいくつか。直接アクセスは完全に禁止されていますが、ユーザーはURLパラメータ(など?option=com_users)や/component/パスを使用できません。

このアプローチは、SEOURLがオフになっていると機能しません。

<?php // no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.event.plugin' );

class  plgSystemComontrol extends JPlugin {

    function plgSystemComcontrol(& $subject, $config) {
        parent::__construct($subject, $config);
    }

    function onAfterRoute() {
        //  get plugin parameters
        $com_redirect_url = $this->params->def('com_redirect_url', 'index.php?option=com_user&view=login');
        $com_debug = $this->params->def('com_debug', '0');
        $com_message = $this->params->def('com_message', '');

        // get option, view, task ..
        $mainframe = JFactory::getApplication();
        $option = JRequest::getCmd('option');
        $view = JRequest::getCmd('view');
        $task = JRequest::getCmd('task');

        //  get current URL
        $uri = JFactory::getURI();
        $url = $uri->toString();
        $u_host = $uri->getHost();
        $u_path = $uri->getPath();
        $path = substr($url, strlen(JURI::root()));

        // get user permissions
        $groupsUserIsIn = JAccess::getGroupsByUser(JFactory::getUser()->id);
        $user_type = implode(" ",$groupsUserIsIn);
        $group_sum = array_sum($groupsUserIsIn);

        if ($com_debug == '1') {
            $mainframe->enqueueMessage('--------------------------------');
            $mainframe->enqueueMessage('$option = '.$option);
            $mainframe->enqueueMessage('$view = '.$view);
            $mainframe->enqueueMessage('$task = '.$task);
            $mainframe->enqueueMessage('$url = '.$url);
            $mainframe->enqueueMessage('$path = '.$path);
        }

        if (strpos($path, 'administrator') === 0) {
            return;
        }

        // set default redirect page
        $redirectPage = ($group_sum > 1) ? 'index.php' : 'index.php/login';
        $directAccess = strpos($path, 'component') !== false || strpos($path, 'option') !== false;

        // allow login page only
        if ($option == 'com_users') {
            if (($view == 'login' || empty($view) || $task == 'user.login' || $task == 'user.logout') && !$directAccess) { // $view == 'default'
                return;
            } else {
                $mainframe->redirect($redirectPage, $directAccess ? 'Direct access to components forbidden' : 'Login/logout is enabled only');
                //JError::raiseError(403, JText::_('Forbidden'));
                //return;
            }
        }

        // deny direct access to components
        if ($directAccess) {
            $mainframe->redirect($redirectPage, 'Direct access to components forbidden');
            //JError::raiseError(401, JText::_('/component/'));
        }

        // get usertype to see if logged-in
        // $user =& JFactory::getUser();
        // $user_type = $user->get('usertype');
        $groupsUserIsIn = JAccess::getGroupsByUser(JFactory::getUser()->id);
        $user_type = implode(" ",$groupsUserIsIn);
        $group_sum = array_sum($groupsUserIsIn);
        if ($group_sum > '1') {
            return ;
        }

        //if user logged-in, then return from function
        if (empty($option)) {
            return;
        }

        $mainframe->redirect( $com_redirect_url, $com_message );

        return;
    }
}
?>

これが、カスタムリダイレクトを実行し、コンポーネントへの直接アクセスを無効にする方法を理解するのに役立つことを願っています。

于 2012-08-31T14:16:20.327 に答える