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

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

ただいまの
回答率

87.77%

CakePHPをDocumentRoot以外に配置した際のアクセス方法

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 5,700

score 13

こんばんは。
この度はCakePHPの本体をDocumentRoot以外に配置した際の
CakePHPへのURLからのアクセス方法についてお聞きしたいと思っています。

サーバーはCentOS、CakePHPは2.4.9を使用しています。

まずサーバーの公開ディレクトリ(DocumentRoot)が以下のように
htmlディレクトリ配下だとします。
/var/www/html

その上で、CakePHP本体を公開ディレクトリに置くのはセキュリティ上
まずいため、CakePHP本体が入っているフォルダである「app」を
公開ディレクトリhtmlのひとつ上の階層の非公開ディレクトリのwwwの中の
webappというディレクトリ内に配置するとします。
/var/www/webapp/app

次に、このままではCakePHPのwebrootにアクセスできなくなってしまうと
考えたので公開ディレクトリのhtmlに非公開ディレクトリ内への
シンボリックリンクをLinuxの「ln -s」コマンドにて下記のように作成しました。
/var/www/html/linktocake

上記にて、www.example.com/linktocakeというURLを叩いた際に
CakePHP内のwebrootへアクセスすることができました。

しかしながら、現状webrootへアクセスはできるのですが、このままでは
CakePHPを非公開ディレクトリ内に置いてしまったため
下記のように各Controllerのアクションへアクセスできなくなってしまいました。
www.example.com/user/index

Controllerのアクションへアクセスするためには
同様に、公開ディレクトリ配下にCakePHP本体が入っているappディレクトリへの
シンボリックリンクを同様に作成すればよろしいのでしょうか?

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

0

CakePHP は公開ディレクトリに置かれることを想定しており、.php のファイルが正しく PHP として実行される状態であればセキュリティ上の問題はありません。(逆に PHP として実行されずにテキストファイルとして表示されてしまうのであれば設定に問題があるので確認してください)

ということでシンボリックリンクは解除します。

unlink /var/www/html/linktocake

またリダイレクトについてですが Apache でルートディレクトリに設置するのであれば CakePHP に付属している .htaccess をそのまま使うことができます。たとえば次のファイルを /var/www/html に設置します。

RewriteEngine On
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]

これは余談ですが URL を例示する際は example.com などを使用するようにしましょう。URL の例示を目的として開設されているため、ドメインが所有されていないか考えずに済みます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/09/01 09:30

    早速のコメントをありがとうございます。
    なるほど、ドキュメントルート下にCakePHP本体は置かないほうがいいと思っていましたが、そうではないのですね。
    確認ですが、CakePHPが格納されているディレクトリ(今回ならばappディレクトリ)には、ConfigやLibディレクトリなど見られてはマズいファイルも入っています。
    これらのセキュリティ面のリスクについては、仰るように.htaccessやPHPファイルが正しく設定されている(画面にコードが出力されない)状態であれば、特に問題はないと考えてよろしいでしょうか?

    また、URLの指定方法についてもご指摘ありがとうございます。今後そのようにします。

    キャンセル

  • 2016/09/01 15:16

    その通りです! 設定ファイルを Web サーバーが参照する必要があります。

    キャンセル

  • 2016/09/01 16:51

    承知しました、ありがとうございました!

    キャンセル

  • 2016/09/02 00:45

    セキュリティ面ですが、自分はCakePHPを利用したECサイトの構築に携わったことがあります。
    クレジットカード情報を扱うため、セキュリティアドバイザーの脆弱性テストも実施しましたが、設定等を除くプログラミングの観点では、XSS、CSRF、SQLinjection対策を強く言われました。
    また、サーバ自体はDMZに設置してありますが、余計な情報(テスト用のページや、PHPinfoなど)が表示されなければ、サーバの設置位置やCakePHPの配置に対して、特に指摘はありませんでした。
    ご参考までに

    キャンセル

-1

Web サーバーには何をお使いですか?(Apache、nginx など)
各サーバーに応じてリライトの設定を行ってください。
例えば Apache なら .htaccess をディレクトリ内に設置することで制御できます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/09/01 08:27

    WebサーバーはApatchになります!
    例えば.htaccessはどのような記載になりますでしょうか?

    キャンセル

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

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

関連した質問

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