-
13-12-2019 - |
質問
私たちは2年以上にわたり走っていたLEMPサーバーにマゼントのウェブサイト(1.6.2)を持っています。最近、いくつかの変更を加えました。
- サイト全体をHTTPSに変更しました。
- 新しいカテゴリをすべて作成し、古いものを取り除いたが、同じ製品を守った
-
フォーム内のサーバーのリダイレクト;
場所/旧/カテゴリ{ ^(この/古い/カテゴリ)/?(。イギリス/新/カテゴリ $ 2永久;
これは、カテゴリページとそれらの中のどちらの製品でも機能し、私たちはみんなよかったと思った!
しかし、Google WMTは、多くの製品を調査し、多くの製品が奇妙にリダイレクトされていることを発見し、そしてリダイレクトループをもたらしていることを発見しました。
Chromeのネットワークタブでは、サーバーのリダイレクトでキックをリダイレクトしている特定の製品の古いURLにアクセスし、適切な対応があります。ただし、そのフォーマットをとるリダイレクトを続ける(一時的に無限)リダイレクト。
ランダム/古い/カテゴリ/ランダム/古い/カテゴリ/ランダム/古い/カテゴリ/ランダム/旧/カテゴリ/ランダム/古い/カテゴリ/ランダム/古い/カテゴリ/ランダム/古い/カテゴリ/カテゴリ/ランダム/古い/カテゴリ/製品名
基本的にそれは各要求に「ランダム/古い/カテゴリ」を追加します。私たちのサーバーホストはADAMANTです。これはA)Magento(そして彼らの問題ではない)とb)前のスラッシュを持つべきです。
これを引き起こす可能性のある設定は見つかりません。
- "Webサーバーのリダイレクトを使用する"がYesに設定されています。
- 私は、私たちのデータベースのテキストダンプで「grep」を使って、影響を受けるURLの1つの発生を試みてみました(喜びのない(喜びのない)。<ポイント1のためにこれはそうではないと確信しています)。< / li>
- 私はまた、手動で罰金の歯のように手動で行っていて、考えられる原因を見ることができません。
私はこれが十分な情報であることを願っています。誰かがリダイレクトがサーバー上で起こっている可能性がある場所を教えてください。
更新:
Douglasが指摘したように見え、新しいURLがリダイレクトされているようですが、サイト(その他)の.confファイルをチェックし、これを引き起こす原則はありません。
update2:
私はわずかな突破口を持っていました。マゼントがカテゴリ内の製品を見つけることができない場合、それはリダイレクトされたカテゴリにリダイレクトされますが、ループ内でラウンドとラウンドします。なぜそれがただ404ではなく私にとって謎であるのか、それでも良いでしょう!
update3:
3年、サーバーの動き、全体の経験とCE 1.9.3.8へのアップグレード後。
Index.phpにdie();
ラインを追加する際には、これがMagentoルーティング問題であることがわかりました。
このロギングコードを追加しました(インターネット上の複数の場所で見つけることができます) mage_core_controller_varien_front クラス:
Mage::log('----Matching routers------------------------------');
Mage::log('Total ' . count($this->_routers) . ': ' . implode(', ',
array_keys($this->_routers)));
while (!$request->isDispatched() && $i++<100) {
Mage::log('- Iteration ' . $i);
$requestData = array(
'path_info' => $request->getPathInfo(),
'module' => $request->getModuleName(),
'action' => $request->getActionName(),
'controller' => $request->getControllerName(),
'controller_module' => $request->getControllerModule(),
'route' => $request->getRouteName()
);
$st = '';
foreach ($requestData as $key => $val) {
$st .= "[{$key}={$val}]";
}
Mage::log('Request: ' . $st);
foreach ($this->_routers as $name => $router) {
if ($router->match($this->getRequest())) {
Mage::log('Matched by "' . $name . '" router, class ' .
get_class($router));
break;
}
}
}
.
このクラスのコードを理解し、コードを理解する。 Magentoはシステムからのルータ(コアまたはモジュールのいずれか)を探して、$request
に対して責任を持ち、一致するとディスパッチ信号が送信されます。
上記のロギングコードを使用すると、ルータのリストがありますが、$requestData
アレイには、ルータがディスパッチしていないことを示唆しています。
各リストルータで、私は controller / router.php ファイルに行き、match(Zend_Controller_Request_Http $request)
メソッドを見つけました。このメソッドの前の行にはTRUE(MATCHを意味する)がTRUE(MATCHの意味)を追加しました.IECHO回線、e. / p>
.
echo "matched in the xxx module"; die();
これにより、責任を担うルータを見つけ、照合後に要求をディスパッチしていないを見つけました。 責任を負うモジュールは mageworx_seosuite です、私はこれがこのオンラインへの参照を見つけることができないので、私はそれが過去の第三者によって修正されていると思われます。できるだけ早くやることができます。
解決
MageWorx_SeoSuiteルータのmatch(Zend_Controller_Request_Http $request)
には、CMS
、Rss
、Category
、Category_layer
、および他のルートが解決されたスイッチステートメントがありました。
問題は、このスイッチステートメントのdefault
( Read:Product )の場合でした。それはかなり独特の状況でした(なぜそれが一握りの製品のみに影響された理由を説明します)。
それはそうだろう。
- URLの終わり(I.E:製品
urlKey
)が書き換えとを持っていないか確認してください; - 上記の製品の最下位のカテゴリが書き換えとが;
- 製品をIDでロードし、
MageWorx_SeoSuite
ヘルパークラスから正規のURLを取得します。 - コンデンシャルURLにリダイレクトを送信し、設定設定に応じて以前の定義されたHTTPレスポンスコードを使用して応答を更新します。
-
exit();
最初の2つの条件文のいずれかが false のいずれかがあった場合。メソッドはreturn false;
(すなわち、ルータが一致しませんでした)です。ただし、最初の2つの条件がtrue
とその他のチェックを渡した場合(Cynonical URLが空ではありませんでした)。ステートメントはリダイレクトを送信し、次にexit();
を送信します。
ルーティングメソロジー全体に新しいが、私はこれに何が悪いことがありました。
- このメソッドは、条件付きのすべてのルートのブール値を返しませんでした(例えば、製品とImediateカテゴリの場合は書き換えがない場合)。
- この方法は「一致」したが、
dispatch
'Dを除いてはいけませんでした。 - これは私の限られた(学部課程)知識に基づいていますが、これは本当に悪いソフトウェア設計のようです。
現時点で指摘する価値があるのは、私は事実なしにMageWorxをスレートしたくないので、このコードが過去5年間で変更された(いくつかの第三者会社が責任があるかもしれない)非常に確信しています。 。
サマリー:Magentoコアが責任を負うように、スイッチ内のdefault:
case文をコメントアウトしました。 Culprit URLは、404
no-route
ページに移動します。これは、それらがすべて古い存在しないパスであるため理想的です。私は通常このハップハザードの方法でモジュールコードを変更しませんが、私はこれをよく文書化しました、そして私たちは私たちのウェブサイトの新しいバージョンが開発中であるという幸運な立場にありますので、「修正」は一時的です。