tra*_*raq 4 apache .htaccess mod-rewrite environment-variables
我正在编写一个 .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 文件所在的物理路径。
[/编辑]
我也很高兴听到其他建议。感谢大家!
为运行 Apache 的用户使用环境变量,
#.profile of Apache user
rewritebase = "some/path"
Run Code Online (Sandbox Code Playgroud)
然后在 .htaccess 文件中引用它:
#.htaccess file
RewriteBase {$rewritebase}
RewriteRule ^(.*)$ - [E=cache:%{ENV:rewritebase}cache]
Run Code Online (Sandbox Code Playgroud)
伪 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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4563 次 |
| 最近记录: |