7

Webサーバーにパブリックプロジェクトとプライベートプロジェクトがあります。公開されているものはすべてWebサーバーのルートに入れ、privateローカルネットワークからのみアクセスできるフォルダーがあります(そこに.htaccessで設定されています)。

すべてのプライベートプロジェクトをprivateフォルダーに入れてリクエストを自動的に処理したいのですが、URLがwebrootから提供されているように見せたいです。
たとえばprivate/project1、URL http://example.com/project1を使用してそのフォルダーを提供し、URLを変更したくない場合です。

この単純な書き直し:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ private/$1           

動作しますが、私がprivate/project2別のものを持っているとき.htaccess

Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /project2/

<Files .*>
       Order Deny,Allow
       Deny From All
</Files>

# Allow asset folders through
RewriteRule ^(assets/.+) - [L]

# Protect files from being viewed
RewriteRule ^(uploads.+) - [F,L]


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

RewriteRule ^(.*)$ index.php/$1 [L]

</IfModule>
Options -Indexes

静的コンテンツは表示されますが、リンクは壊れています。動作させるには何を変更する必要がありますか?

また、を持っていprivate/project3て参照するhttp://example.com/project3/場合は問題ありませんが、http://example.com/project3(末尾の/なしで)参照するhttp://example.com/private/project3/と、ブラウザのようにURLが表示されます。なんで ?どうすればそれを回避できますか?

4

3 に答える 3

5

あなたの場合に必要なのはmod_aliasだけです。

次に、次のようなプライベートプロジェクトを提供します。

Alias /project3 /apache/htdocs/private/project3

また、.htaccessを使用すると、アクセス権を制御できます。

サーバーを再起動せずに制御したい場合は、.htaccessファイルに配置できる次の設定でこれを達成することができます。

RewriteRule ^/(project1)$ /private/$1/index.html
RewriteRule ^/(project1/)(.*)$ /private/$1$2

index.html-プロジェクトの任意のインデックスファイル。このようにして、プライベートプロジェクトに使用しているパスのほかに、URLのパブリック部分に完全にアクセスできるようになります。RewriteCondを追加してIPをチェックし、ローカルネットワークに対してのみ書き換えを有効にすることもできます。

于 2012-08-12T00:17:02.617 に答える
2

実際、質問を見ると、これはパスパイプラインに干渉するmod_dirの問題のようです。具体的にDirectorySlashは、デフォルトでオンになっているため、ブラウザがディレクトリを要求していて、末尾のスラッシュが欠落していると判断した場合、ブラウザをリダイレクトします。あなたは向きを変えることを試みることができますが、それに関連するセキュリティ警告DirectorySlash Offがあります:

末尾のスラッシュリダイレクトをオフにすると、情報が開示される可能性があります。mod_autoindexがアクティブ(Options + Indexes)で、DirectoryIndexが有効なリソース(たとえば、index.html)に設定されていて、そのURLに他の特別なハンドラーが定義されていない状況を考えてみます。この場合、末尾にスラッシュが付いたリクエストには、index.htmlファイルが表示されます。ただし、末尾にスラッシュがないリクエストでは、ディレクトリの内容が一覧表示されます。

これは、セットアップに適用できる場合とできない場合があります。末尾のスラッシュを考慮して、書き換えルールを変更することもできます。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/$ private/$1/     

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ private/$1/     

しかし、mod_rewriteとmod_dirを常に相互にうまく機能させるようにしようとすると、さまざまな結果が得られました。

于 2012-08-12T00:50:33.857 に答える
2

仮想ドメインで十分ではないでしょうか?

ドメインをプライベートプロジェクトに使用し、別のドメインをパブリックプロジェクトに使用できます。

http://httpd.apache.org/docs/2.2/vhosts/examples.html

于 2012-08-12T08:52:19.460 に答える