web-dev-qa-db-ja.com

非SEF URLを使用してコンポーネントへのアクセスをブロックする方法はありますか?

私のクライアントは、SEFが有効になっている場合でも、非SEF URLを使用してJoomlaのコンポーネントにアクセスできることを認識しています。

URLにItemidがないため、ページが乱雑になるため、彼はそれを好みません。たとえば、 http://www.joomla.org/index.php?option=com_content は、彼のサイトで人々に見せたくないものです。

グローバル構成でSEFが有効になっているときに、非SEF URLを使用してサイトへのアクセスをブロックする方法はありますか?

7
Hung Tran

次のコードでシステムプラグインを作成できます。

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エラーをスローし、必要に応じてユーザーをホームページにリダイレクトできます。

編集:

一部の拡張機能で疑問符を使用できるようにするには、次のようにします。

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エラーがスローされます。

6
csbenjamin

しかし、カジュアルな訪問者がどのように非SEF URLを推測し、SEF URLの代わりにこれらを使用するので、乱雑なテンプレートビューを取得できるでしょうか。

とにかく、これを回避する1つの方法は、サードパーティのSEF拡張機能を使用することです。これにより、常に非SEFが対応するSEF URLに変換されます。訪問者はブラウザのアドレスバーにnon-sefを表示しません。

しかし、乱雑なテンプレートの問題は解消されません。この問題は、ページの表示中に別のメニューアイテムが考慮されるか、メニューアイテムがまったく考慮されないため、これらのページを対象としたcssサフィックス、モジュール、またはその他の特別なものが正しく処理されるためと考えられます。

この問題を解消するには、これらのページを目的のメニュー項目に割り当てる必要があります。

2
FFrewin

私の推奨は、sh404sefを使用し、itemidを使用せずに常にURLにピン留めすることです。構成の一部として「アイテムID管理」を参照してください。

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

1
Chad Windnagle