2011-11-15 14 views
3

mod_rewriteで必要な作業を行うのが少し難しいです。URLファイルのパスを短縮するmod_rewrite

私たちはDrupalインストールに仮想サブドメインのグループを持っています。したがって、academics.univ.edu、about.univ.eduなどはすべて、同じコアのDrupalインストールの一部です。

ファイルアクセスは現在academics.univ.edu/sites/all/academics/files/myfile.jpgです。しかし、このパスはabout.univ.edu/sitse/all/about/files/myfile.jpgまたは他の有効なサブドメインとしても機能します。

mod_rewriteを使用してacademics.univ.edu/files/myfile.jpgを受け入れ、上記の場所からファイルを配信したいとします。

RewriteCond %{REQUEST_URI} ^(about|academics|bursar|calendar)\.univ\.edu\/files\/(.*)$ [NC] 
RewriteRule ^/sites/all/files/$1/$2 [L,NC] 

は、私はおそらくこれについて間違った方法をつもりですが、私はそれを確認したい:

は、ここで私が試したものです。私は、HTTP_HOSTを使って別々のルールを作ることによって、サブドメインを動作させることができますが、ファイル内のルールが少なくて済むようにしました。また、私はHTTP_HOSTをサブドメインのサブディレクトリとして存在するサイトで動作させることはできません。たとえば、undergrad.univ.edu/biology/files/myfile.jpgは/sites/all/biology/files/myfile.jpgを配信する必要があります。

答えて

2

%{REQUEST_URI}のホストに一致することはできません。 %{HTTP_HOST}を使用するには、%1逆方向を使用して一致するものにアクセスしてください。実際のURIはルール自体で照合することができます。このような何か:するRewriteCondで

RewriteCond %{HTTP_HOST} ^(about|academics|bursar|calendar)\.univ\.edu$ [NC] 
RewriteRule ^files/(.*)$ /sites/all/files/%1/%2 [L,NC] 

%1参照マッチ(about|academics|bursar|calendar)$1参照のRewriteRuleで一致(.*)。したがって、この例ではhttp://about.univ.edu/files/foo.htmlに要求があり、要求は/sites/all/files/about/foo.htmlに書き換えられます。

また、これが仮想ホストまたはサーバ設定にある場合は、RewriteRuleの "^"と "files"の間に "/"が必要です。

+0

ありがとうございます! –