達成したいこと
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
を設定するにはどうすればよいですか?
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>
そのディレクトリの下にあるすべてのものは、許可されたネットワークからアクセスしている場合にのみアクセスできます。 ( Allow
edホストを指定する他の方法もあります )。
私のドメインは
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