web-dev-qa-db-ja.com

Install.phpはxcopyの展開後に利用可能

開発マシンにSqliteを使用してDrupal 7サイトを作成しました。localhost/ install.phpにアクセスすると、次のように表示されます:Drupalはすでにインストールされています。

共有ホスティング(Windows)にすべてをデプロイした後、サイトは機能しますが、install.phpが再び利用可能になります。匿名ユーザーやサイトがメンテナンスモードの場合でも利用できます。それを無効にするにはどうすればよいですか?または、別の方法で展開する必要がありますか?

2
Koen

インストーラーがチェックするのは、設定ファイルにサイトのデータベース情報が含まれているかどうかです。

これは理論的には単純に聞こえ、install.phpが実行されることはないはずですが、多くのコンポーネントが関係しています。

  1. DNSがあり、さまざまなサブドメインに応答する場合と応答しない場合があります。
  2. サブドメインを提供する場合と提供しない場合があり、Drupalに到達する前にサブドメインを再書き込みする場合としない場合があるWebサーバー構成があります。
  3. Drupalは、7以降、ドメインをsites/ディレクトリにマップできるsites.phpファイルをサポートしています。
  4. 最後に、sitesディレクトリ自体があります。ここでDrupalはsettings.phpファイルを見つけ、有効な$db_urlを確認し、インストールを許可するかどうかを決定します。

多くのコンポーネントと、それらをすべて正しく設定するための技術的な複雑さのために、install.phpがインストールを許可することを決定する状況に陥るのは非常に簡単です。匿名ユーザーは新しいデータベースを作成できないため、これは通常問題にはなりませんが、それでもまったく間違っているように見えます。

Install.phpを削除することは解決策ですが、技術的にはコアをハッキングしており、将来の展開を不必要に複雑にします。

私は通常、これに対抗するために2つのことを行います。

まず、sites/example.com/などのドメインにちなんで名付けられたディレクトリからサイトを実行し、sites/defaultをリンクにします。メインサイトへ。このように、Drupalによって要求されている予期しないドメインは、メインドメインによって処理されます。

次に、このvhostファイルを使用して、本番システムでinstall.phpへのアクセスを常に完全にブロックします。

# ssh -L 8080:127.0.0.1:80 example.com
<Location /install.php>
  Deny from all
  Allow from 127.0.0.1
</Location> 

<Location /update.php>
  Deny from all
  Allow from 127.0.0.1
</Location>

これにより、Apacheはインストールと更新の両方へのアクセスをブロックします。上部のコメントは、サーバーへのsshトンネルを開いて、トラフィックが127.0.0.1から来ているように見せ、開発者がupdate.phpを実行できるようにする方法を思い出させるものです。

以下のIISで似たようなもの。 notこれをテストしたことに注意してください。 ISSの経験がある方は、この部分を改善できるように更新またはコメントしてください。

<location path="install.php">
    <system.webServer>
        <security>
            <authorization>
                <remove users="*" roles="" verbs="" />
                <add accessType="Allow" roles="Administrators" />
            </authorization>
        </security>
    </system.webServer>
</location>
2
Letharion

1つの方法は、install.phpファイルを完全に削除することです。別のオプションは、Apacheを介してコンテンツを提供するユーザーが使用できないようにファイルにアクセス許可を設定することです(おそらく)

0