我正在编写一个 .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>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我还必须设置一个 ENV 变量来“替代”RewriteBase 值。我宁愿不这样做,因为如果 RewriteBase 被更改,我还必须记住更改 ENV 变量。最终,这可能是其他人使用的 CMS 的一部分,我希望配置尽可能简单/直接,并尽量减少出错的机会。我希望能够仅设置ENV:cache变量而不需要设置ENV:rewritebase变量,如下所示(或类似):
# doesn't work #
RewriteRule ^(.*)$ - [E=cache:%{RewriteBase}cache/]
Run Code Online (Sandbox Code Playgroud)
正如所暗示的,该cache/目录将始终位于 RewriteBase 中指定的目录内。[编辑]
。。。但是,它并不总是该 .htaccess 文件所在的物理路径。
[/编辑]
我也很高兴听到其他建议。感谢大家!