web-dev-qa-db-ja.com

管理ページのMagento 404

約1週間前、私は新しいサイトのテスト環境で作業していました。 「 http://magento.localhost.com/admin 」の結果はルートなし404になるので、1時間放置して戻ってきて、管理ページにアクセスできなくなりました。これにアクセスできるのは1つだけであり、どのような意味でも生きていません。環境をホストするためにUbuntuでVBoxを使用しています。可能な修正という点で、これまでに試してみました…

  • Core_store、core_store_group、core_website、customer_groupの各テーブルIDが0に設定されていることを確認します(この記事および他の多くの記事で説明されています- http://www.nude-webdesign.com/fix-for-magento-admin-エラー-404-ページ-見つかりません/

  • /app/code/core/Mage/Core/Controller/Varien/Front.phpメソッド_isAdminFrontNameMatchedで遊んでadminPathを表示します(これは「admin」です)

  • Varフォルダーをクリアし、ブラウザーのキャッシュを空にしました。サイトのキャッシュは無効になっています。

  • 「index.php」をURLに追加しても、結果は404になります。

  • Magento Admin 404 のとおり、「app/etc/use_cache.ser」というファイルは存在しません。

この問題が発生した当日、私は自分が作成したモジュールにコピーしたいくつかのレイアウトファイルとテーマのメディアクエリ(すべて、この問題が発生し始める前でも元の状態に戻っていた)をいじっていました。

誰かがここで何が間違っているかについて何か提案がありますか?これが発生している可能性のある他の考えられる理由は何ですか?

何もありがとう。

EDIT 1:06 pm 2013/10/10:Standard.phpが探しているコントローラ名を取得するAlan Stormのメソッドに応じて、私はたくさん返されました「欠落」しているコントローラファイル。ただし、これらのファイルを見つけるために1.7.0.2の新しいコピーをダウンロードした後、それらはどちらにも存在しませんでした。これは、Standard.phpでのAlanのvar_dump提案からの私の出力です。

  • ... "/ public_html/app/code/core/Mage/Index/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/Paygate/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/Paypal/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/Widget/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/Oauth/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/Authorizenet/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/Bundle/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/Centinel/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/Compiler/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/Connect/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/Downloadable/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/ImportExport/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/Api2/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/PageCache/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/XmlConnect/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/Adminhtml/controllers/Controller.php"

  • ... "/ public_html/app/code/community/Phoenix/Moneybookers/controllers/Controller.php"

  • ... "/ public_html/app/code/core/Mage/Captcha/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/CurrencySymbol/controllers/Adminhtml/Controller.php"

  • ... "/ public_html/app/code/core/Mage/CurrencySymbol/controllers/Adminhtml/IndexController.php"

解決済み3:39 pm 2013/10/9:わかりましたが、かなり率直に修正されています。私は、Alan Stormのvar_dump提案の出力を使用して、コアコードプールのどこかにエラーを作成したことを意味しました(これは、私が意図したものではなく、デフォルトのコードをねじ込んでいます)。残念ながら、正確な学習のため、すべてをデフォルトのコアコードプールである1.7.0.2に置き換えました。これは、Alanが元の回答を更新する前に行われました。アラン、ありがとう。

12
ooblek6000

ルートなし404エラーは通常、Magentoがロードするはずのコントローラーファイルを見つけられないことを示します(通常、設定の誤りが原因です)。

これを診断する最も簡単な方法は、_validateControllerClassNameにアクセスすることです

#File: app/code/core/Mage/Core/Controller/Varien/Router/Standard.php
protected function _validateControllerClassName($realModule, $controller)
{
    $controllerFileName = $this->getControllerFileName($realModule, $controller);

    if (!$this->validateControllerFileName($controllerFileName)) {  
        return false;
    }

    $controllerClassName = $this->getControllerClassName($realModule, $controller);
    if (!$controllerClassName) {
        return false;
    }

    // include controller file if needed
    if (!$this->_includeControllerClass($controllerFileName, $controllerClassName)) {
        return false;
    }

    return $controllerClassName;
}

そして、いくつかのロギングまたはvar_dumpsを、戻りfalseステートメントの周りにドロップします。これにより、Magentoが探していて見つからないファイルがわかります。通常は、問題を指摘するのに十分です。

    if (!$this->validateControllerFileName($controllerFileName)) {  
        var_dump($controllerFileName);
        return false;
    }

    $controllerClassName = $this->getControllerClassName($realModule, $controller);
    if (!$controllerClassName) {
        var_dump($controllerClassName);
        return false;
    }

    // include controller file if needed
    if (!$this->_includeControllerClass($controllerFileName, $controllerClassName)) {
        var_dump("Couldn't include: $controllerFileName");
        return false;
    }

pdate:Magentoが複数の場所でコントローラーファイルを探すのは正常です。adminhtmlコントローラーファイルを含むものとして登録されているすべてのモジュールを確認する必要があります。

ただし、検索されるほとんどすべてのコントローラファイルは/Controller.phpという名前です。デフォルトの/adminインデックスページの場合、これはIndexController.phpである必要があります。これにより、システムは、名前が空白のコントローラーを探す必要があると思います(/adminではなく(admin/indexではないため、デフォルトのコントローラー値が、使用しているURLであるためです)。

これが発生する理由は無数にあります。多くの場合、コアファイルが変更されたり、モジュールの構成ノードが誤った値に設定されたりします。以下の解決策がうまくいかない場合は、コードベースとクリーンなベースを比較し、すべてのカスタムモジュールを無効にして、問題が解決するまでモジュールをオンに戻すか、ダイビングする必要があります。 Magentoルーティングコードをデバッグして、システムが不満である理由を理解してください。

この動作の一般的な原因の1つは、次の場所でカスタム管理パスに無効な値が設定されている(または値がまったく設定されていない)ことです。

System -> Configuration -> Admin -> Admin Base URL -> Use Custom Admin Path

「カスタム管理パス」の値が空白の場合、または追加の/が含まれている場合、これがルーティングを妨害している可能性があります。

管理者にアクセスできないため、次のSQLクエリを実行してみてください

select * from core_config_data where path like '%custom_path%';    
...
292 default 0   admin/url/use_custom_path   1
293 default 0   admin/url/custom_path   admin/

上記と同様の結果が表示される場合、またはadmin/url/custom_pathが空白/存在しないが、admin/url/use_custom_pathがまだ1である場合は、それが問題です。

これらの構成値(admin/url/use_custom_path)および(admin/url/use_custom_path)をcore_config_dataから削除してみてください。

それがあなたのシステムに当てはまらない場合、私の空のコントローラーによる私の最良の推測は何らかの未知の理由のコードです

#File: app/code/core/Mage/Core/Controller/Varien/Router/Admin.php
public function fetchDefault()
{
    // set defaults
    $d = explode('/', $this->_getDefaultPath());
    $this->getFront()->setDefault(array(
        'module'     => !empty($d[0]) ? $d[0] : '',
        'controller' => !empty($d[1]) ? $d[1] : 'index',
        'action'     => !empty($d[2]) ? $d[2] : 'index'
    ));
}

controllerキーに空白の値を入力しています。

22
Alan Storm

私の場合、ストアセットがないため、管理者から404が渡されました。次のクエリを実行して解決しました

SET SQL_SAFE_UPDATES=0;
SET FOREIGN_KEY_CHECKS=0;
UPDATE `core_store` SET store_id = 0 WHERE code='admin';
UPDATE `core_store_group` SET group_id = 0 WHERE name='Default';
UPDATE `core_website` SET website_id = 0 WHERE code='admin';
UPDATE `customer_group` SET customer_group_id = 0 WHERE customer_group_code='NOT LOGGED IN';
SET FOREIGN_KEY_CHECKS=1;
SET SQL_SAFE_UPDATES=1;

以下のエラーがvar/log/system.logに記録されているかどうかを確認できます

ERR(3):回復可能なエラー:Mage_Core_Model_Store :: setWebsite()に渡される引数1は、Mage_Core_Model_Websiteのインスタンスである必要があり、nullが指定され、/ .../app/code/core/Mage/Core/Model/App.phpで呼び出されます634行目、/ .../app/code/core/Mage/Core/Model/Store.phpの395行目で定義

12
Ricardo Martins

何よりもまず、構成ファイル(app/etc/local.xml)を確認し、frontNameタグの値として「admin」があることを確認してください。例:

<adminhtml>
  <args>
    <frontName><![CDATA[admin]]></frontName>
  </args>
</adminhtml>

通常、あなたがしようとすると http://yoursite.com/admin それはあなたに管理領域を与えますそのようなURLを使ってみてください http://yoursite.com/index.php/admin そしてそれが機能する場合は、おそらく書き換えルールを変更するか、提案に従うだけです(以下のリンクを参照)。

3
Keyur

カスタム管理URL www.shop.com/customadminroute/とシステム->設定-> Web-> URLオプション->店舗コードをURLに追加:有効にしたショップでこの問題が発生しました

この場合、次のモジュールで修正する必要があります。

https://github.com/romfr/404adminlogin

カルメンブレーメンのブログ投稿に感謝します。

http://neoshops.de/2012/09/07/magento-404-fehlerseite-beim-admin-login/

2
ahe_borriglione