web-dev-qa-db-ja.com

https://www.joomla.org/のような空のItemidを修正する方法?

Googleは私のサイトのURLを次のようにインデックス化しました: https://www.joomla.org/?Itemid =

これはもちろんstrangeページになります。 自分のサイトでお試しください!

これをJoomlaのデフォルトのメニュー項目にリダイレクトするには最善の方法は何でしょうか?

Joomlaの Redirect Manager が機能せず、htaccessの301も機能しないため...

私の解決策はこれです:

// Joomla System Trigger
public function onAfterRoute()
{
    // some basic checks
    if ($this->app->isSite() === false) return; 

    $app = JFactory::getApplication();
    $Itemid   = $app->input->getInt('Itemid');      

    // if an Itemid exists return
    if ($Itemid) return true;

    // get the default menu item id
    $menu = JFactory::getApplication()->getMenu();
    $menu_default = $menu->getDefault();
    $menu_default_id = $menu_default->id;

    // route it
    $link = 'index.php?Itemid=' . $menu_default_id;
    $link = JRoute::_($link);       

    // redirect to it
    $app->redirect($link, 'We had an empty Itemid.');
}   

しかし、これを別の方法で処理する必要がありますか?

私が試した他の方法は次のとおりです:

.htaccess

Redirect 301 /?Itemid= https://www.joomla.org/

そしてリダイレクトマネージャーを介して:

Redirect Manager

<jdoc:include type="component" />は空です(もちろん)。それがstrangeで私が意味したことです。そのため、デフォルトのメニュー項目にリダイレクトします。

ところでGoogleは、Googleリンクを使用してページ(のみ)にインデックスを付けました。例えばGoogle Nieuws

画像を参照してください。 Google Nieuws

それは私のサイトマップではなく、コードやデータベースのどこにもありません。 Screaming Frog SEOはそれを完全にスパイダーしました。

しかし、わかりました。URLを削除するようGoogleに依頼しました。わかります。

ええ、サイトに存在したことがないURLをクロールするすべての検索エンジンを取得します。これはよく発生します。通常、Web上のランダムなサイトからURLが渡されるためです。あなたはそれを制御することはできません、そして検索エンジンのどれもそれをあまり気にしないので、それは敗戦です。

Sh404SEFなどの一部のSEF拡張機能は、そのURLを正当なページのエイリアスとして処理できるため、バグがある場合は、それが1つのアプローチになる場合があります。

.htaccessを使用できるはずですが、試した例として投稿した構文は使用しません。 Apacheのリダイレクトは貪欲なアプローチを取る傾向があるため、この例では?Itemid=101だけでなく?Itemid=もリダイレクトされます。

より良いパターンは次のようになります:

RedirectMatch "(.*)\?Itemid=$" "/whereever"

それで終わるすべてのURLをリダイレクトし、mod_rewriteの方が優れている場合もあります。しかし、すべての.htaccess試行と同様に、これはこれらのディレクティブを許可するサーバー構成に依存します。

私の誘惑は、それをリダイレクトするのではなく、「攻撃」であると見なして403にしたいと思うかもしれません。悪意のある人々が新しい獲物を見つけさせるために検索エンジンへのリンクを提供したのは、これが初めてではありません。

0
Arlen

より多くのサイトで問題を再現することができました。独自の回避策を作成するのではなく、Joomlaチームにバグとして問題を報告して対処する必要があると思います。

私はここで何が行われているのか詳細を理解することを公言していませんが、../libraries/src/Router /のコードはURIのエンコード、デコード、および検証に多くの労力を費やしているので、それを理解する人ができる/すべきだと思います着信または発信URLで空のItemid =を処理するルールまたはチェックを作成します。

Googleがインデックスを作成している空のItemid =を作成するコードを特定できない限り、これは誰にとっても問題を修正する最良の方法だと思います。

0
Irata