このディレクトリ構造を持つ単純なローカル サイトがあります。
/
test2/
.htaccess
bootstrap.php
git-service/
bootstrap.php
私が達成しようとしているのは、ユーザーが www.example.com/test2/git/ を要求すると、git-service ディレクトリの内容を取得し、ディレクトリ git-service を直接要求しようとすると (www.example .com/test2/git-service/)、このリクエストは通常のリクエストとして扱われます (たとえば、メインの test2/bootstrap.php への GET 値として与えられます)。
私が今までにしたことはこれです:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /test2
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteCond %{REQUEST_URI} ^/test2/git($|/.*$)
RewriteRule . /test2/git-service/bootstrap.php?request=GIT [L]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteCond %{REQUEST_URI} ^/test2/git-service($|/.*$)
RewriteRule . /test2/bootstrap.php [L]
問題は、/test2/git と /test2/git-service の両方のリクエストがメインの bootstrap.php ファイル (test2/bootstrap.php) に渡されることです。2 番目のブロック (git-service リクエストを処理するブロック) をコメントアウトすると、動作は正しくなります。つまり、test2/git リクエストが git-service/bootstrap.php ファイルに正しく渡されます。しかし、2 番目の部分をアクティブにすると、以前と同じ test2/git/ への要求がメインの test2/bootstrap.php ファイルに渡されます。
反対に、このすべての背後にある理由は、ディレクトリの実際の名前を、それを取得するために行われた要求とその内容から切り離そうとしていることです。
事前にどうもありがとうございました。
====編集====
anubhava さん、どうもありがとうございました。サーバーが git/ ページのリクエスト中に 404 エラーを返し続けたため、マイナーな変更が必要でしたが、あなたの提案は非常にうまく機能しました (git-service ページは正しくマップされていました)。
私のために働いたコードはこれです:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /test2/
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
#RewriteRule ^git(/.*|)$ git-service/bootstrap.php?request=GIT [L,NC]
RewriteCond %{REQUEST_URI} ^/test2/git(|/.*)$
RewriteRule . /test2/git_service/bootstrap.php?request=GIT [L]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^git-service(|/.*)$ bootstrap.php [L,NC]
何らかの理由で、2 番目の RewriteCond 行を削除できず、最初の RewriteRule の一致するすべてのドットを実際の条件に置き換えることができないか、404 エラーが発生します。