REQUEST_URI の一部に対する apache RewriteCond 変数

REQUEST_URI の一部に対する apache RewriteCond 変数

静的 HTML サイトを Drupal CMS に移行します。ほとんどのコンテンツは今のところ HTML をコピーしただけなので、そのままにして、PDF ファイルへの相対リンクを機能させたいと思います。Drupal のすべてのファイルはこのディレクトリにあります: (以前のサブディレクトリのツリー全体をコピーしました。これはいいので、そのままにしておきたいです)

 DOCROOT/sites/mydomain.xyz/files/FORMER/SUB/DIRS/filename.pdf

したがって、CMS コンテンツ内のすべての相対リンクは次のようになります。

 http://mydomain.xyz/node/FORMER/SUB/DIRS/filename.pdf

ファイルが存在するかどうかを確認し、URLを書き換えたい

RewriteEngine On
RewriteCond     /var/www/mydomain.xyz/sites/mydomain.xyz/files/%{REQUEST_URI MINUS "node/"} -f
RewriteRule     (.*)$ /sites/mydomain.xyz/files/$1  [R]

どうすればそれを達成できるでしょうか?

答え1

バックリファレンスが必要になりますRewriteCondマニュアル詳細については。

大まかに言うと(ただし現時点ではテストする方法がありません):

RewriteCond     %{REQUEST_URI MINUS} ^/node(.*)
RewriteCond     /var/www/mydomain.xyz/sites/mydomain.xyz/files/%1 -f
...

は後方参照%1でありRewriteCondRewriteRule後方参照($1)とは対照的である。

答え2

そのように動作する

RewriteCond     %{REQUEST_URI} ^/node(.*)
RewriteCond     /var/www/schottdorf.de/sites/schottdorf.de/files%1 -f
RewriteRule     .* /sites/schottdorf.de/files/%1  [L]

(しかし残念ながら、Apache が認識できない docroot の直下に別のレベルのサブディレクトリがあることを忘れていました。)

すべてのトップレベルドキュメントにDrupalパスエイリアスを設定したかどうかを確認したい - 確認します

関連情報