質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • CakePHP

    2307questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

  • .htaccess

    384questions

    Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

レンタルサーバーでの、CakePHP3の.htaccess 記述がわかりません

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,778

ootoro

score 6

CakePHP3
PHP7.1
レンタルサーバ:さくらインターネット
プラン:スタンダード
マルチドメインを使用:/mydoc
ドキュメントルートをWWWに設置
intlはプラグインを設置して回避
パーミッションは.htaccessとindex.phpは755

症状:
おそらく.htaccessの記述が違うためマルチドメインのアドレスにアクセスしても、ページが表示されない
(HTTP ERROR 500)

サーバーエラーログ:
script not found or unable to stat: /home/xxx/www/index.php
File does not exist: /home/xxx/www/cake3
Directory index forbidden by Options directive: /home/xxx/www/

/home/xxx/
|-cake3-|
|       |-srcフォルダなど
|       |-htaccess
|       |-index.php
|
|
|
|-www/mydoc/-|
|            |-cssフォルダなど
|            |-htaccess
|            |-index.php

(図がずれているかも)
おそらく一般的な配置だと思います。

/home/xxx/cake3/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /cake3
RewriteRule ^$ ../www/mydoc/ [L]
RewriteRule (.*) ../www/mydoc/$1 [L]
</IfModule>

/home/xxx/cake3/index.php

require 'webroot' . DIRECTORY_SEPARATOR . 'index.php';

/home/xxx/www/mydoc/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

/home/xxx/www/mydoc/index.php

if (php_sapi_name() === 'cli-server') {
$_SERVER['PHP_SELF'] = '/' . basename(FILE);

$url = parse_url(urldecode($_SERVER['REQUEST_URI']));
$file = DIR . $url['path'];
if (strpos($url['path'], '..') === false && strpos($url['path'], '.') !== false && is_file($file)) {
return false;
}
}
require '/home/xxx/cake3/vendor/autoload.php';

use App\Application;
use Cake\Http\Server;

// Bind your application to the server.
$server = new Server(new Application('/home/xxx/cake3/config'));

// Run the request/response through the application
// and emit the response.
$server->emit($server->run());

ネット上の情報をかなり検索してみましたがダメでした。
cake2とフォルダ構成が違うため.htaccessで完全に止まっています。
どなたか.htaccessについて教えてもらえないでしょうか。
些細なことでもいいのでアドバイスよろしくおねがいします。

補足:
同じさくらインターネット・スタンダードプラン(マルチドメインを使用)に設置しているCakePHP2の.htaccessです。
PHPのバージョンなどは違いますが、それ以外は基本的には同じ環境です。
Cake2と3では、フォルダ構成が違うので3カ所に配置しています。
こちらは問題なく動作しています。

/home/xxx/cake2/app/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /cake2/app
RewriteRule ^$ /www/mydoc/ [L]
RewriteRule (.*) /www/mydoc/$1 [L]
</IfModule>

/home/xxx/cake2/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /cake2/app
RewriteRule ^$ /www/mydoc/ [L]
RewriteRule (.*) /www/mydoc/$1 [L]
</IfModule>

/home/xxx/www/mydoc/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

追記:
https://moshimore.jp/knowledge/2016/08/09/sakura_server_cakephp3/
このページに書いてある通りに実行したら、webrootをマルチドメインに配置した状態でちゃんとcakephp3のトップページが表示されました。
intlもインストール
ただし、phpは5.6に変更

原因は不明ですが、上記のテストフォルダにプログラムを移植してローカルと同じように表示されました。
一応解決・・・??
とりあえずローカルで作ったcakephp3をzipファイルで上げて、サーバー上で展開すると思わぬ壁にぶち当たる可能性があります。
cakephp2のときは上手くいったんだけど・・・。
もし何が悪かったのかわかる方がいたら教えてほしいです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

0

マルチドメインを設定すれば、自動的に/home/xxx/www/mydocがマルチドメインのドキュメントルートに設定されますよね。
なので、.htaccessは設定する必要はないと思います。
(さくらのレンタルサーバはよく分からないので、違っていたらすみません。)

CakePHP3の場合、ご質問文中のディレクトリ構成にするには、
1. /home/xxx/cake3にCakePHP3を置く
2. /home/xxx/www/mydocにCakePHP3のwebrootの中身を全て移動する
3. 1.で移動したindex.phpを下記のように編集

require '/home/xxx/cake3/vendor/autoload.php';
…
$server = new Server(new Application('/home/xxx/cake3/config'));
…


4. /home/xxx/cake3/config/path.phpを編集し、webrootのパスを修正

define('WWW_ROOT', '/home/xxx/www/mydoc/');

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/04 15:17

    設定が必要ないというのは、htaccessの設置自体が必要ないということでしょうか?
    とりあえず指摘の通り変更(パスを直接指定)して、htaccessのある場合とない場合を試してみましたが、変化はありませんでした。

    マルチドメインが効いてないのかと思い、試しにindex.phpにechoでの出力を試したところ表示されたので、効いているみたいです。

    あと今回はCakephp3ですが、まったく同じサーバー(環境)でCakephp2は問題なく動作しているのでやはり.htaccessが原因ではないかと個人的には思っています。

    キャンセル

  • 2017/04/04 16:20

    改めてご質問文を拝見すると、私と同じことを試していましたね。失礼しました。
    私もローカル環境で試したら動作したので、間違いではないと思うのですが。

    .htaccessは、CakePHP3をインストールした時に入っているものをそのまま変更なしに使う、という意味です。

    いろいろ試されているみたいですが、そもそもCakePHP3を/home/xxx/www/mydocにインストールすると動作しますか?
    動作する場合は、上で私がコメントしたことをもう一度試して、そのエラーログを改めて見せていただけますか?ご質問文中のエラーログは、どうやら違うことを試した時のものみたいですので。

    キャンセル

  • 2017/04/04 17:20

    cake3を/mydoc に置いてみたところ動きませんでした。
    試しに/mydocにphpinfo()を記述したファイルをアップしたところ、こちらも動きませんでした。

    WWWに直接phpinfo()のファイルをアップしたら、こちらは表示されました。
    /mydocにアップした際のエラーログは
    Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace
    です。
    ページには、The server encountered an internal error or misconfiguration and was unable to complete your request.
    と表示されています。

    軽く調べた感じだと、.htaccessで無限ループに陥ってるかも・・・??

    キャンセル

  • 2017/04/04 18:33

    動いてなかったのは、.htaccessに
    RewriteBase /
    を記述することで一応直りました。
    (急いでアップしたためhtaccessの書き直しを忘れていました)
    いまはintl回避のためのintllessのプラグインで問題が起きていてそちらを調べています。

    キャンセル

  • 2017/04/04 18:56

    とりあえず/mydoc のcakephp3は動いてるみたいです
    いまはデータベース接続エラーが出ているので・・・
    やはり.htaccessの可能性が高そうです。

    キャンセル

  • 2017/04/04 19:13

    だいぶ進展したようでよかったです。
    このままCakePHP3のディレクトリを分けてもエラーが出ないといいのですが…

    キャンセル

  • 2017/04/05 17:30

    いまもって原因は不明ですが、上記のように直接さくらサーバーにインストールしたCakePHP3にローカルで作ったプログラムを移植することで回避できました。
    いろいろアドバイスありがとうございました。

    キャンセル

0

エラーログは見れないでしょうか?
そこにどんなメッセージが表示されているかがわかるだけで、解決にはかなり前進すると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/04 11:34

    script not found or unable to stat: /home/xxx/www/index.php
    Directory index forbidden by Options directive: /home/xxx/www/
    File does not exist: /home/xxx/www/cake3

    関係がありそうなサーバー側のエラーログはこの3つです。
    (あとはrobots.txtやfaviconでした)
    マルチドメインの方じゃない、もともとのドメインにもアクセスしているので、そっちのエラーも含まれているかもしれません。

    キャンセル

0

ローカルで作ったのをzipファイルで上げて、サーバーで展開すると思わぬ壁にぶち当たる可能性があります。
composerでサーバーに直接cakephp3インストールして、ローカルで作った必要なファイルだけをアップすると回避できました。
.htaccessの問題だったのか、原因は不明です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • CakePHP

    2307questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

  • .htaccess

    384questions

    Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。