Ok。だから、私はこれとこれのような不気味に似た質問を見てきましたが、それらは間違いなく役に立ちましたが、まだ最後の問題に直面しています.
次の URL があるとします。
http://playground.dev/projects/project1
http://playground.dev/projects/project1/work
http://playground.dev/projects/project1/work/1.txt
そして、次のディレクトリ構造があるとします。
/var/www
- プロジェクト/
-- project1/
--- public_html/
---- index.html
---- work/
----- 1.txt
私の目標は、各プロジェクト (project1、project2 など) の "ルート" 内にある汎用の .htaccess ファイルを作成し、上記の URL を適切なファイルとディレクトリにマップすることです。
今、私はそれをかなり理解しました:
RewriteEngine On
RewriteRule ^public_html - [L]
RewriteRule ^(.*)$ public_html/$1
これは私が欲しいものを手に入れます。上記の URL はすべて想定どおりにマップされ、ほとんどの外れ値/誤った入力には適切に 4xx が割り当てられます。ただし、問題が 1 つあります。Apache は次のような URL を受け入れます。
http://playground.dev/projects/project1/work/1.txt/fgdgfgfdgfdgd
いいえ、fgdgfgfdgfdgd
存在しませんし、「1.txt」もディレクトリではありませんが、Apache は 404 なしでこの忌まわしき行為を続けることを許可するだけでなく、どうにかして「1.txt」ファイルへのパススルーをあたかもかのように管理します。入力した URL は でしたhttp://playground.dev/projects/project1/work/1.txt
。
.htaccess ファイルを削除してフル パスで同じことを試しても、これは発生しません。apache のドキュメントはほとんど光を当てておらず、Google は飛び散っています。たぶん私は疲れていて、何かが欠けているのでしょう...しかし、ここで何が起こっているのでしょうか?
もう少し具体的に言ってみましょう:
URL は次のように構成されます。http://playground.dev/projects/{projectname}{path}
ここで、{projectname} と {path} は両方とも変数であるだけでなく (projectname は単一のディレクトリにすぎません)、{path} が存在する場合と存在しない場合、3 つのディレクトリの深さがある場合とない場合があります。または 300 ディレクトリの深さになることさえあります。