4

要求されたページがキャッシュに存在するかどうかを確認する .htaccess ファイルを作成しています。チェックを実行する (そして入力を節約する) ために、キャッシュの場所を ENV 変数に設定しています。

# all this works as I expect #
<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /some/path/
RewriteRule ^(.*)$ - [E=rewritebase:/some/path/,E=cache:%{ENV:rewritebase}cache/] 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{ENV:cache}$1\.html -f
RewriteRule ^(.*)$ $1\.html [L]

</IfModule>

ご覧のとおり、ENV 変数を RewriteBase 値の「代用」に設定する必要もあります。RewriteBase が変更された場合、ENV 変数も変更することを覚えておく必要があるため、私はむしろそうしません。最終的に、これは他の人が使用する CMS の一部になる可能性があります。これは、エラーの可能性を最小限に抑えて、構成をできるだけシンプル/簡単にしたいと考えています。次のように (または同様の)、変数を設定する必要なくENV:cache、変数のみを設定できるようにしたいと思います。ENV:rewritebase

# doesn't work #
RewriteRule ^(.*)$ - [E=cache:%{RewriteBase}cache/]

暗示されているように、cache/ディレクトリは常に RewriteBase で指定されたディレクトリ内に配置されます。[編集]
. . . ただし、この .htaccess ファイルが存在する物理パスであるとは限りません。
[/編集]

代替案なども教えていただけると幸いです。みんな、ありがとう!

4

2 に答える 2

5

Apache を実行するユーザーの環境変数を使用します。

#.profile of Apache user
rewritebase = "some/path"

次に、.htaccess ファイル内で参照します。

#.htaccess file
RewriteBase {$rewritebase}    
RewriteRule ^(.*)$ - [E=cache:%{ENV:rewritebase}cache]

疑似 ReWriteRule もこのトリックを実行できます。

#This will be true for any user agent
RewriteCond  %{HTTP_USER_AGENT}  ^.*

#Replace / with / and set the rewritebase variable to /some/path
RewriteRule  /(\/some\/path)* / [E=rewritebase:$1/some/path]

#Reference the rewritebase variable
RewriteBase {$rewritebase}

#Redefine the rewritebase variable
RewriteRule ^(.*)$ - [E=rewritebase:$1]
于 2012-07-02T18:27:43.547 に答える
1

ベース値の書き換えを使用する解決策を見つけました。たった一点です。. これは機能しています。rewritebase が定義されている場合、rewritebase に転送されます。rewritebase が定義されていない場合は、コードのディレクトリに転送されます。

RewriteRule ^index.html(/?)$ ./ [R=301,L]
于 2016-03-13T17:09:10.630 に答える