web-dev-qa-db-ja.com

Webサーバーのパブリックページとプライベートページをどのように分離する必要がありますか?

達成したいこと
Webサーバーにパブリックサイトとプライベートサイトがあり、どういうわけかそれらを分離したいのですが、この分離を非表示にしたいと思います。
たとえば、DocumentRootは/var/wwwであり、パブリックプロジェクトは/var/www/publicの下にあり、プライベートプロジェクトは/var/www/privateの下にあります。
ドメインがwww.example.comで、public/publicproj1にアクセスしたい場合、URLはwww.example.com/publicproj1になります。また、private/privateproj1が必要な場合、URLはwww.example.com/privateproj1になります。
/var/www/privateをローカルネットワークのみに制限したいのですが、publicはどこからでもアクセスできる必要があります。

privateの下にはたくさんのプロジェクトがあります。何かを置くたびに、Apache.confで新しい設定をしたくありません。

また、他に何も要求されていない場合は/var/www/public/startingpageを提供したいので、www.example.comはこのページを表示します。


これまでに試したこと:
1。)DocumentRootを/var/wwwに作成し、その下にパブリックプロジェクトを配置し、次のようにprivateフォルダーに書き換えルールを作成しました。

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ private/$1 [QSA]

プライベートフォルダの下のフォルダに.htaccessファイルがもっとあるため、これは機能しません。 (たとえば、独自の.htaccessを必要とするフロントコントローラー、フォーラムなどを備えたアプリケーション)

2.)DocumentRootを/var/www/privateに作成しましたが、パブリックプロジェクトが提供されません。 (異なるアクセスオプションで2つのドキュメントルートを作成できますか?)Alias /publicproj1 /var/www/publicproj1のようなエントリを作成しましたが、次の設定でRedmineをインストールしています。

RewriteEngine On
RewriteRule   ^/$  /redmine  [R]

<Directory /home/www/redmine>
        RailsBaseURI /redmine
        PassengerResolveSymlinksInDocumentRoot on
</Directory>

単純なAliasエントリに置き換えることはできません(またはできますか?)

私の質問
どのフォルダ構造を作成する必要がありますか?どのリダイレクトルールを作成する必要がありますか?他に何も要求されていないときに表示されるように/var/www/startingpageを設定するにはどうすればよいですか?

3
kissgyorgy

OK、IPアドレスでprivateプロジェクトへのアクセスを制限したいので、次のディレクトリ構造があります。

  • DocumentRoot/var/www
    • 公開プロジェクトは/var/www/publicの下にあります
    • プライベートプロジェクトは/var/www/privateの下にあります

したがって、Apache構成ファイル(httpd.conf)に、次のような<Directory>ディレクティブを追加します。

<Directory /var/www/private>
   Order deny,allow
   Deny from all
   Allow from 10.0.0.0/24
</Directory>

そのディレクトリの下にあるすべてのものは、許可されたネットワークからアクセスしている場合にのみアクセスできます。 ( Allowedホストを指定する他の方法もあります )。


私のドメインはwww.example.comです。
/var/www/html/public/publicproj1としてwww.example.com/publicproj1に、/var/www/html/private/privateproj1としてwww.example.com/privateproj1に到達したい

これは少し難しいです。プロジェクトごとに、書き換えルールまたは Alias ディレクティブが必要になります。おっしゃるように、これは理想的な状況ではないので、他のいくつかのオプションを見てみましょう。

上記のようにディレクトリ構造を設定して構成すると、すぐにwww.example.com/public/proj1およびwww.example.com/private/proj1としてディレクトリにアクセスできるようになります。
それがうまくいけば、完了です。

それでも十分な解決策ではない場合は、パブリックプロジェクトを/var/www/htmlの直下に移動することを検討してください。パブリックプロジェクトにはwww.example.com/publicproj1としてアクセスでき、プライベートプロジェクトには/private/ビットを追加してアクセスできます(おそらく、 「プライベート」プロジェクトのURLの少し醜いことはあまり気にしないでください。これにより、パブリックなもののためにAliasを実行する必要がなくなります。


開始ページに関して、次のルールでwww.example.comが要求された場合、startingpageフォルダーのコンテンツを表示できます。

RewriteEngine On

# Don't apply to URLs that go to existing files or folders.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Only apply to URLs that aren't already under folder.
RewriteCond %{REQUEST_URI} !^/startingpage/

RewriteRule ^(.*)$  /startingpage/$1
3
voretaq7