![REQUEST_URI の一部に対する apache RewriteCond 変数](https://rvso.com/image/1267752/REQUEST_URI%20%E3%81%AE%E4%B8%80%E9%83%A8%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%20apache%20RewriteCond%20%E5%A4%89%E6%95%B0.png)
静的 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
でありRewriteCond
、RewriteRule
後方参照($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パスエイリアスを設定したかどうかを確認したい - 確認します