ホームページは、アップグレード後に404になります
質問
最近、1.10から1.13にアップグレードし、ホームページにいくつかの問題が発生しています。他のすべてのCMSページは適切に機能していますが、ホームページは一貫してCMS 404を返しています。どのCMSページがホームページになるかは関係ありません。常に404を返します。
ストアビューが適切に設定されており、ホームページ「URL」がCMSに設定されており、core_url_rewriteに空のrequest_pathフィールドがあるエントリは見つかりません。
開発環境ではすべてが正常に機能しました。
実際のソリューションが見つかるまでストップギャップ修正として、実際のホームページで使用されるはずのCMSページをロードするようにMagentoの404ページが設定されています。ユーザーは違いに気づきませんが、サイトのホームページはまだ技術的に404を投げています。
ここで何が起こっているのかについて何か考えはありますか?
編集
犯人は、空のURLキーを備えた製品でした。これまで、製品のアップロードワークフローには、名前が付いていた前に製品がERPからMagentoに追加される場合がありました。 URLキーは製品名に基づいて生成されるため、これらの製品にはURLキーがありません。 1.10では、これは明らかに問題ではありませんでした。 1.13ただし、ドキュメントルートをURLキーとして入力したかのように扱います。製品URLリダイレクトはCMSリダイレクトに取って代わるため、Magentoはこの製品を指摘しようとしていました。製品が「個別に見えない」とマークされたため、404を返しました。
解決
少しデバッグせずにこれから抜け出すことはありません。以下はMagento CEに適用されますが、Magento EEに関連する必要があります。また、この投稿は、 私のMagento Dispatchシリーズ. 。あなたがしたい場合は 本当 ボトムアップのデバッグに従事し、そこから始めます。
まず、私が見ているマゼントの問題のほとんどは、「この1つがxだと確信していたが、実際にはYだった」に沸きませんでした。あなたが私があなたにチェックするように言っている何かについて絶対に確信していても、あなたが実際にそれをチェックすることを確認してください。
Magentoのホームページのルーティングは、 Mage_Core_Controller_Varien_Router_Standard
物体。最初の重要な部分はこの行です
#File: app/code/core/Mage/Core/Controller/Varien/Router/Standard.php
$p = explode('/', $this->_getDefaultPath());
_getDefaultPath
メソッドセット値のMagento Store構成を調べます。
protected function _getDefaultPath()
{
return Mage::getStoreConfig('web/default/front');
}
これが対応する構成です
System -> Configuration -> Web -> Default Pages -> Default Web URL
Trippleこの値が文字列に設定されていることを確認します
`cms`
そしてあなたの core_config_data
テーブル
select * from core_config_data where path = 'web/default/front';
予期しないスコープされた値は含まれていません。
上記を行ったら、一時的なデバッグコードを追加して、 $p
その呼び出しの後。
$p = explode('/', $this->_getDefaultPath());
var_dump($p);
//or
Mage::Log($p);
//or
file_put_contents('/tmp/test.log',"$p\n",FILE_APPEND);
このような出力が表示されるはずです
array (size=1)
0 => string '' (length=0)
array (size=1)
0 => string 'cms' (length=3)
2つのアイテムがダンプ/ログに記録されている理由は match
メソッドは、管理ルーターと標準ルーターオブジェクトの間で共有されます。 2番目のアイテムが1つの要素配列でない場合 cms
, 、 それはあなたの問題だ。それが何が起こっていないかを把握すると、あなたは問題を解決するためにあなたの道を進んでいます。
それが問題ではないと仮定すると、Magentoはこれで派遣する必要があります indexAction
の方法 IndexController.php
のファイル Mage_Cms
モジュール。の開始に次の2行を追加することにより、これが当てはまることを確認してください indexAction
#File: app/code/core/Mage/Cms/controllers/IndexController.php
public function indexAction($coreRoute = null)
{
$pageId = Mage::getStoreConfig(Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE);
if (!Mage::helper('cms/page')->renderPage($this, $pageId)) {
$this->_forward('defaultIndex');
}
}
君は見るべきだ Mage_Cms_IndexController::indexAction
ブラウザウィンドウにダンプしました。これが起こらない場合、標準的なルーティングが使用されないようにするシステムについて何かがあります。 match
方法とその理由を理解します $controller
, $controllerClassName
, $controllerInstance
, 、 と $action
変数はを指しません indexAction
の方法 IndexController.php
のファイル Mage_Cms
モジュール。 (これが当てはまる場合は、コメントでそう言って、このためにデバッグスキャンリオをデバッグする更新を提供します)
このコントローラーファイルとアクションに正しくルーティングされていると仮定すると、
var_dump(__METHOD__);
exit;
代わりに新しいものを追加します var_dump
$pageId = Mage::getStoreConfig(Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE);
var_dump($pageId);
Magentoでは、ホームページとして使用する必要があるページの識別子を構成できます。 Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE
ストア構成パスに対応する必要があります web/default/cms_home_page
, 、それはに対応します
System -> Configuration -> Web -> Default Pages -> CMS Home Page
セクション。これは、Magentoにホームページとして使用するCMSページを伝える場所です。あなたは次のようなものを見るはずです
string 'home' (length=4)
また
string 'about-magento-demo-store' (length=4)
または、画面にダンプされました。これはCMSホームページ識別子です。予期しない値を設定している場合は、次のことを実行してみてください
select * from core_config_data where path = 'web/default/cms_home_page';
スコープされた値を確認します。 CMSホームページIDが何であるかに関係なく、次のSQLステートメントでページの存在を確認してください(の値を仮定して home
).
select * from cms_page where identifier = 'home';
Magentoがシステム内で構成されたページが見つからない場合、404ページに転送されます。次のコードでそれを見ることができます indexAction
if (!Mage::helper('cms/page')->renderPage($this, $pageId)) {
$this->_forward('defaultIndex');
}
もしも renderPage
戻り値 false
, 、それから私たちはに転送されます defaultIndexAction
404ページをレンダリングする方法。
public function defaultIndexAction()
{
$this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
$this->getResponse()->setHeader('Status','404 File not found');
$this->loadLayout();
$this->renderLayout();
}
「ホームページへのルートなし」の問題の90%を見つけるのに十分であり、他の10%のデバッグ方向に向けてください。
他のヒント
私は、非アクティブなカテゴリの空のURLキーでこの同じ問題に遭遇しました。アップグレード後にEE 1.13.0.0で再インデックスすることをテストするまで、ポップアップしませんでした。同じ取引、ホームページの404。
私はおそらくアランの探偵の仕事を過度に単純化していますが、最終的には新しいEnterprise_url_rewriteテーブルを空のrequest_pathのために照会しました。
SELECT * FROM `enterprise_url_rewrite` WHERE request_path = '';
一致するTarget_Pathは、ホームページをハイジャックしていたリクエストに私を押し付けました。それから、私はそのカテゴリを修正しました、そしてすべてが順調でした。
これはMagentoの既知のバグです - 以下を実行することをお勧めします:
request_path = ''からempertise_url_rewriteから削除します。
さらに、シェルディレクトリには新しいスクリプトが数があります(リリースノートをお読みください)
おそらくここでこの問題..インポートされたグループIDを確認してくださいhttp://blog.chapagain.com.np/magento-solution-to-error-404-not-found-in-admin-login-page/