EC-CUBE / ec-cube

EC-CUBE is the most popular e-commerce solution in Japan
https://www.ec-cube.net
Other
745 stars 648 forks source link

ROOT_URLPATHを設定した時の動作不具合について #191

Closed amidaike closed 9 years ago

amidaike commented 9 years ago

eccube_install.shの設定にある ROOT_URLPATH=${ROOT_URLPATH:-"/"} を ROOT_URLPATH=${ROOT_URLPATH:-"/netshop/"} に変更後、 Application.phpの $app->mount('', new ControllerProvider\FrontControllerProvider()); を $app->mount('/netshop', new ControllerProvider\FrontControllerProvider()); に変更し、 htmlディレクトリ直下にnetshopディレクトリを作成後、 cssやjsディレクトリを移動すれば http://localhost/netshop で動作することは確認できましたが、 MYページを押すとエラーになります。

おそらくセキュリティ絡みのエラーだと思います。

amidaike commented 9 years ago

すみません。自己レスです。

Application.phpの

$this->register(new \Silex\Provider\SecurityServiceProvider(), array( 'security.firewalls' => array( 'admin' => array( 'pattern' => '^/admin', 'form' => array( 'login_path' => '/admin/login', 'check_path' => '/admin/login_check', 'username_parameter' => 'login_id', 'password_parameter' => 'password', 'with_csrf' => true, 'use_forward' => true, ), 'logout' => array( 'logout_path' => '/admin/logout', 'target_url' => '/admin/', ), 'users' => $app['eccube.repository.member'], 'anonymous' => true, ), 'customer' => array( 'pattern' => '^/', 'form' => array( 'login_path' => '/mypage/login', 'check_path' => '/login_check', 'username_parameter' => 'login_email', 'password_parameter' => 'login_pass', 'with_csrf' => true, 'use_forward' => true, ), 'logout' => array( 'logout_path' => '/logout', 'target_url' => '/', ), 'users' => $app['eccube.repository.customer'], 'anonymous' => true, ), ), )); $app['security.access_rules'] = array( array('^/admin/login', 'IS_AUTHENTICATED_ANONYMOUSLY'), array('^/admin', 'ROLE_ADMIN'), array('^/mypage/login', 'IS_AUTHENTICATED_ANONYMOUSLY'), array('^/mypage/refusal_complete', 'IS_AUTHENTICATED_ANONYMOUSLY'), array('^/mypage', 'ROLE_USER'), );

とセキュリティ定義してある箇所を、

$this->register(new \Silex\Provider\SecurityServiceProvider(), array( 'security.firewalls' => array( 'admin' => array( 'pattern' => '^/admin', 'form' => array( 'login_path' => '/admin/login', 'check_path' => '/admin/login_check', 'username_parameter' => 'login_id', 'password_parameter' => 'password', 'with_csrf' => true, 'use_forward' => true, ), 'logout' => array( 'logout_path' => '/admin/logout', 'target_url' => '/admin/', ), 'users' => $app['eccube.repository.member'], 'anonymous' => true, ), 'customer' => array( 'pattern' => '^/netshop', 'form' => array( 'login_path' => '/netshop/mypage/login', 'check_path' => '/login_check', 'username_parameter' => 'login_email', 'password_parameter' => 'login_pass', 'with_csrf' => true, 'use_forward' => true, ), 'logout' => array( 'logout_path' => '/logout', 'target_url' => '/netshop', ), 'users' => $app['eccube.repository.customer'], 'anonymous' => true, ), ), )); $app['security.access_rules'] = array( array('^/admin/login', 'IS_AUTHENTICATED_ANONYMOUSLY'), array('^/admin', 'ROLE_ADMIN'), array('^/netshop/mypage/login', 'IS_AUTHENTICATED_ANONYMOUSLY'), array('^/netshop/mypage/refusal_complete', 'IS_AUTHENTICATED_ANONYMOUSLY'), array('^/netshop/mypage', 'ROLE_USER'), );

とnetshopを追加すれば動作するようになりました。

amidaike commented 9 years ago

上記に対してさらに自己レスですが、 netshop と記述している部分をeccube_install.shに定義されたROOT_URLPATHを使うために、 $app['config']['root'] とすればROOT_URLPATHに設定した値を使えるのですが最後の/が邪魔ですね。

ROOT_URLPATH=${ROOT_URLPATH:-"/netshop"} と定義すると正常に動作しなくなりますし。

何かいい方法は無いでしょうか。

amidaike commented 9 years ago

netshopだと分かりづらいので、storeで上記を整理して再度説明させていただきます。

http://ドメイン名/store としてアクセスさせたい場合、

eccube_install.shに対して、 ROOT_URLPATH=${ROOT_URLPATH:-"/store/"}

とROOT_URLPATHを設定した場合、 Application.phpにある、 $app->mount('', new ControllerProvider\FrontControllerProvider()); を $app->mount('/store', new ControllerProvider\FrontControllerProvider()); というように変更しないと http://ドメイン名/store/ では接続できません。

また、htmlディレクトリ直下にstoreディレクトリを作成し、 htmlディレクトリ直下にある admin js upgrade upload user_data をstoreディレクトリ直下にコピーする必要があります。(upgradeやuploadも必要かどうかは要確認)

同様に、管理画面に関しては、 http://ドメイン名/admin/ で接続可能ですが、 http://ドメイン名/store/admin/ で接続したいのであれば、 Application.phpにある、 $app->mount('/admin', new ControllerProvider\AdminControllerProvider()); を $app->mount('/store/admin', new ControllerProvider\AdminControllerProvider()); と/storeをadminの前に追加する必要があります。

186 の質問で管理画面が動作されないという事ですが、

ROOT_URLPATH=${ROOT_URLPATH:-"/html/"} $app->mount('/html/admin', new ControllerProvider\AdminControllerProvider()); と設定すると、 http://ドメイン名/html/admin で管理画面にアクセスできるはずです。

ただし、管理画面にROOT_URLPATHを設定すると、色々と修正する箇所が発生するため、 http://ドメイン名//admin/ が今のところ無難ですが、いづれ対応してくれる事を期待します。 →ログイン、ログアウト等

また、ROOT_URLPATHを設定するとセキュリティ絡みでまだ動作が不安定です。 例えば、MYページを押すと今のままだとエラーになります。 こちらは対応方法はあるのですが、現段階ではこちらではまだ調査不足です。

Yangsin commented 9 years ago

環境にあわせてファイル配置をごにょごにょしたくはないので、ちゃんと考えないとダメですねぇ・・・
あんまり参考にならないかもしれませんが、以下のような配置で問題なく動きました。

EC-CUBEのソースの場所:  /hoge/fuga/store/  {app/, src/, html/ etc...}  
ApacheのDocumetRoot: /hoge/fuga/  
eccube_install.sh の   
 ROOT_URLPAHT: /store/html/   
 ADMIN_DIR:  admin/   

として、 http://ドメイン名/store/html だと特に何も変更することなく動いてます。

amidaike commented 9 years ago

上記の回答で私が勘違いしていた事に気がつきました。

ROOT_URLPATHを設定するとプログラム中で自動的に http://ドメイン名/store にしてくれるような設定ではなくて、 DocumentRootからのパスを設定するものだったんですね。

大きな勘違いでした。 ありがとうございました。

Yangsin commented 9 years ago

明示的にDocumentRootからEC-CUBEのhtml/index.php がある位置へのHTTPでのアクセスに必要なサブディレクトリを教えてあげる設定になっていたかと思います。

ということは無事に設定できましたでしょうか? 特に問題がないようでしたら、クローズとしてくださいませ