我正在编写一个 .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
多变的without需要设置一个ENV:rewritebase
变量,像这样(或类似):
# doesn't work #
RewriteRule ^(.*)$ - [E=cache:%{RewriteBase}cache/]
正如所暗示的,cache/
目录将始终位于 RewriteBase 中指定的目录内。
[编辑]
。 。 。然而,它会not始终是此 .htaccess 文件所在的物理路径。
[/edit]
我也很高兴听到其他建议。感谢大家!
使用环境变量运行 Apache 的用户 https://stackoverflow.com/questions/6569080/how-to-define-a-variable-in-apaches-httpd-conf-file,
#.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]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)