質問 > フロント機能 > サブディレクトリインストール お気に入り登録ボタン⇒ログイン⇒ページが見つかりません |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
yamap |
投稿日時: 2020/3/22 16:19
対応状況: −−−
|
新米 登録日: 2020/3/22 居住地: 投稿: 3 |
サブディレクトリインストール お気に入り登録ボタン⇒ログイン⇒ページが見つかりません ▼テンプレート
[EC-CUBE] 4.0.3(新規インストール) [レンタルサーバ] 自前サーバー [OS] CentOS 6.2 [PHP] 7.1.33 [データベース] MySQL 5.6.37 [WEBサーバ] Apache 2.2.15 [ブラウザ] Google Chrome 80.0.3987.132 [導入プラグインの有無] 特になし [カスタマイズの有無] 特になし [現象] サブディレクトリにインストールした状態で、 商品詳細ページからログインせずにお気に入り登録ボタンをクリックして、 ログインページへ遷移後、ログイン処理をするとページが見つかりませんエラーとなる。 【再現手順】 1.商品詳細ページにアクセス http://sample.com/shop/products/detail/1 2.お気に入りに追加ボタンをクリック 3.ログイン画面に遷移 4.ログイン処理 5.戻り先のURLがおかしくページが見つかりませんエラーになる http://sample.com/shop/shop/products/add_favorite/1 サブディレクトリ部分が重複してURL生成されているのが原因のようです。 ソースを追いかけてもどこで処理されているかよくわかりませんでした。 サブディレクトリへインストールした際に、ベースURLを設定する箇所があったりするでしょうか? ちなみに、.envファイルには、 ECCUBE_COOKIE_PATH=/shop/ という記述があります。 原因と対処法のご教示いただけると幸いです。 よろしくお願いいたします。 追記) ドキュメントルート直下インストールで試すと問題なく遷移していました。 また、関連してですが、 1.お気に入りに登録ボタンクリック 2.ログインページ 3.ログインに失敗 4.ログイン成功 5.戻り先はTOPページに変わる(商品詳細ページに戻らない) という現象も確認しました。 |
468 |
投稿日時: 2020/3/23 11:53
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: サブディレクトリインストール お気に入り登録ボタン⇒ログイン⇒ページが見つかりません サブディレクトリインストール時に「ページが見つかりません」のエラーが発生する原因ですが
商品詳細ページ→お気に入りに追加ボタンクリック→ログインページに遷移した際に ログインフォームに戻り先URLとして埋め込まれる <input type="hidden" name="_target_path" value="******" /> にサブディレクトリ込みのパスがセットされる事が原因と思われます。 _target_pathへどのような値がセットされているか Mypage/login.twigを確認すると
のように1回のみ有効となるセッションフラッシュを利用する仕様となっているようです。 該当のセッションフラッシュは /src/Eccube/Controller/ProductController.phpの347行目の $this->setLoginTargetPath($this->generateUrl('product_add_favorite', ['id' => $Product->getId()])); でセットされているようです。 ここでセットするURLからサブディレクトリを取り除く事で現象を解消できるのではないかと思います。 あと1度でもログインを失敗すると商品詳細ページに戻らないのは _target_pathをセッションフラッシュで設定している事が原因です。 こちらは解消しようと思うと、かなりややこしい改修が必要になるような気がします。 (マイページトップに遷移したい時に商品詳細に遷移してしまったりする事が起きるようになりそうです)
|
yamap |
投稿日時: 2020/3/26 10:01
対応状況: −−−
|
新米 登録日: 2020/3/22 居住地: 投稿: 3 |
Re: サブディレクトリインストール お気に入り登録ボタン⇒ログイン⇒ページが見つかりません ご回答ありがとうございます。
サブディレクトリの件は、該当の箇所で含まれているのは確認できました。 ここでサブディレクトリを除くとなると、ハードコーディングしか思いつかないのですが、 サブディレクトリ部分だけを取得するような方法があったりするでしょうか? また、ログイン失敗の件につきましてもご確認ありがとうございます。 ログイン失敗時に、セッションフラッシュで_target_pathを復元できれば、 遷移先を切り替えることができるのでは? という浅はかな想像もしておりましたが、そう簡単にはいかないものなのですね。 もう少し考えてみます。ありがとうございました。 |
468 |
投稿日時: 2020/3/26 10:22
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: サブディレクトリインストール お気に入り登録ボタン⇒ログイン⇒ページが見つかりません サブディレクトリの件は私もハードコーディングによる文字列置換くらいしか思い付きません...
ログイン失敗時にリクエストから_target_pathを受け取ってセッションフラッシュに再度セットすれば問題が解決するのではないかと思いますが ログイン失敗時のイベントハンドラを追加する時点で 私の認識ではsymfonyの理解が必要となる、ややこしい改修という認識です。 慣れている方にはすぐに改修出来るところかと思います。
|
yamap |
投稿日時: 2020/3/26 10:40
対応状況: −−−
|
新米 登録日: 2020/3/22 居住地: 投稿: 3 |
Re: サブディレクトリインストール お気に入り登録ボタン⇒ログイン⇒ページが見つかりません 開発環境ではサブディレクトリ、本番環境ではルートディレクトリとしているため、
ハードコーディングはなかなか厳しいです。。。 もう少し調べてみます。 ログイン失敗のパターンは、AbstractController:setLoginTargetPath()を参考に、 次のようなカスタムクラスを追加して試してみてうまく復元はできました。 リダイレクト先は相変わらずサブディレクトリですが。。。
AbstractController:setLoginTargetPath()では、
となっており、$namespaceという引数で処理を分けているようなのですが、どのような利用を想定しているのかわかりませんが、 既存ソースからはそのような呼び出し方をしている個所は見当たりませんでしたので、とりあえず無視してみました。 もっといい方法があれば教えてください。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |