RewriteCond 模式不扩展环境变量
RewriteCond Pattern not expanding Environment variables
正在尝试获取对 mydomain 的所有请求。com/downloads/* 到 运行 到 download.php。因为这也可能是 mydomain.com/some/path/downloads/* 我需要从 中获取的动态 RewriteBase 但是当在 RewriteCond 模式中使用创建的环境变量时它不起作用并且日志显示原始 % {ENV:BASE} 而不是扩展变量。
.htaccess 在域中。com/some/path:
RewriteEngine On
RewriteBase /
# Dynamic RewriteBase from
RewriteCond %{REQUEST_URI}:: ^(.*?/)(.*)::$
RewriteRule ^(.*)$ - [E=BASE:%1]
RewriteCond %{REQUEST_URI} ^%{ENV:BASE}/?download/(.*) [NC]
RewriteRule .* %{ENV:BASE}/download.php?file=%1&%{QUERY_STRING} [L]
重写日志:
(3) [perdir /var/www/123/some/path/] strip per-dir prefix: /var/www/123/some/path/download/file/225 -> download/file/225
(3) [perdir /var/www/123/some/path/] applying pattern '^(.*)$' to uri 'download/file/225'
(4) [perdir /var/www/123/some/path/] RewriteCond: input='/some/path/download/file/225::download/file/225' pattern='^(.*?/)(.*)::\2$' => matched
(5) setting env variable 'BASE' to '/some/path/'
(3) [perdir /var/www/123/some/path/] add path info postfix: /var/www/123/some/path/download -> /var/www/123/some/path/download/file/225
(3) [perdir /var/www/123/some/path/] strip per-dir prefix: /var/www/123/some/path/download/file/225 -> download/file/225
(3) [perdir /var/www/123/some/path/] applying pattern '^(.*)$' to uri 'download/file/225'
(4) [perdir /var/www/123/some/path/] RewriteCond: input='/var/www/123/some/path/download' pattern='!-f' => matched
(4) [perdir /var/www/123/some/path/] RewriteCond: input='/some/path/download/file/225' pattern='^%{ENV:BASE}/?download/' [NC] => not-matched
(1) [perdir /var/www/123/some/path/] pass through /var/www/123/some/path/download
BASE 在第 4 行中设置正确,但是当在第 9 行中检查 RewriteCond 时它没有扩展。如果它被扩展,据我所知它应该工作得很好。
有谁知道出了什么问题以及如何让它正常工作?
服务器版本:Apache/2.2.15 (Unix)
删除 RewriteBase
行并通过匹配 RewriteRule
中的模式修复第二条规则:
Options -MultiViews
RewriteEngine On
# Dynamic RewriteBase from
RewriteCond %{REQUEST_URI}:: ^(.*?/)(.*)::$
RewriteRule ^(.*)$ - [E=BASE:%1]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^download/(.+) %{ENV:BASE}/download.php?file= [L,QSA]
正在尝试获取对 mydomain 的所有请求。com/downloads/* 到 运行 到 download.php。因为这也可能是 mydomain.com/some/path/downloads/* 我需要从 中获取的动态 RewriteBase 但是当在 RewriteCond 模式中使用创建的环境变量时它不起作用并且日志显示原始 % {ENV:BASE} 而不是扩展变量。
.htaccess 在域中。com/some/path:
RewriteEngine On
RewriteBase /
# Dynamic RewriteBase from
RewriteCond %{REQUEST_URI}:: ^(.*?/)(.*)::$
RewriteRule ^(.*)$ - [E=BASE:%1]
RewriteCond %{REQUEST_URI} ^%{ENV:BASE}/?download/(.*) [NC]
RewriteRule .* %{ENV:BASE}/download.php?file=%1&%{QUERY_STRING} [L]
重写日志:
(3) [perdir /var/www/123/some/path/] strip per-dir prefix: /var/www/123/some/path/download/file/225 -> download/file/225
(3) [perdir /var/www/123/some/path/] applying pattern '^(.*)$' to uri 'download/file/225'
(4) [perdir /var/www/123/some/path/] RewriteCond: input='/some/path/download/file/225::download/file/225' pattern='^(.*?/)(.*)::\2$' => matched
(5) setting env variable 'BASE' to '/some/path/'
(3) [perdir /var/www/123/some/path/] add path info postfix: /var/www/123/some/path/download -> /var/www/123/some/path/download/file/225
(3) [perdir /var/www/123/some/path/] strip per-dir prefix: /var/www/123/some/path/download/file/225 -> download/file/225
(3) [perdir /var/www/123/some/path/] applying pattern '^(.*)$' to uri 'download/file/225'
(4) [perdir /var/www/123/some/path/] RewriteCond: input='/var/www/123/some/path/download' pattern='!-f' => matched
(4) [perdir /var/www/123/some/path/] RewriteCond: input='/some/path/download/file/225' pattern='^%{ENV:BASE}/?download/' [NC] => not-matched
(1) [perdir /var/www/123/some/path/] pass through /var/www/123/some/path/download
BASE 在第 4 行中设置正确,但是当在第 9 行中检查 RewriteCond 时它没有扩展。如果它被扩展,据我所知它应该工作得很好。
有谁知道出了什么问题以及如何让它正常工作?
服务器版本:Apache/2.2.15 (Unix)
删除 RewriteBase
行并通过匹配 RewriteRule
中的模式修复第二条规则:
Options -MultiViews
RewriteEngine On
# Dynamic RewriteBase from
RewriteCond %{REQUEST_URI}:: ^(.*?/)(.*)::$
RewriteRule ^(.*)$ - [E=BASE:%1]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^download/(.+) %{ENV:BASE}/download.php?file= [L,QSA]