如何重写 TimThumb 以用于电子邮件
How to Rewrite TimThumb to be used on emails
在我的服务器上,我使用 TimThumb 作为调整图像大小的插件,它工作得很好,除非我尝试在我的电子邮件内容中使用它。
Google Gmail 将此 https://example.com/thumb.php?sr+c=
输出为 src
属性(注意加号)。
我看here是因为查询。
那么我如何使用 .htaccess
重写我的 url 并使用 /src/
删除 /thumb.php?src=
?
这是 link 图片的样子:
https://example.com/thumb.php?src=example.jpg
这就是我需要的
https://example.com/src/example.jpg
这是我现在的.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^welcome/([^/]+)/?$ index.php?a=welcome&filter= [NC,QSA,L]
RewriteRule ^explore/([^/]+)/?$ index.php?a=explore&filter= [NC,QSA,L]
RewriteRule ^page/([^/]+)/?$ index.php?a=page&filter= [NC,QSA,L]
RewriteRule ^(([^/]+)+)(/([^/]{0,32})(/.+)?)?$ index.php?a=&q= [L,QSA]
index.php
和 thumb.php
都在根文件夹中
更新
我试图将此行添加到我的 .htaccess
并访问 https://example.com/src/example.jpg
但它再次不起作用,在这种情况下它重定向到 "welcome" 页面。
RewriteRule ^src/([^/]*)$ /thumb.php?src= [L]
第二次更新
我也试过这个:
RewriteRule ^src/([^/]+)/?$ thumb.php?src= [NC,QSA,L]
它再次不起作用 https://example.com/src/example.jpg
重定向到我的 "welcome" 页面。
这是我的 .htaccess 现在的样子
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^welcome/([^/]+)/?$ index.php?a=welcome&filter= [NC,QSA,L]
RewriteRule ^explore/([^/]+)/?$ index.php?a=explore&filter= [NC,QSA,L]
RewriteRule ^page/([^/]+)/?$ index.php?a=page&filter= [NC,QSA,L]
RewriteRule ^src/([^/]+)/?$ thumb.php?src= [NC,QSA,L]
RewriteRule ^(([^/]+)+)(/([^/]{0,32})(/.+)?)?$ index.php?a=&q= [L,QSA]
第三次更新
在 thumb.php
这就是我构建 src 查询的方式
$_GET['src'] = 'https://s3-eu-west-1.amazonaws.com/bucket1'.'/'.$_GET['src'];
我不知道这里出了什么问题。
第四次更新
基于 Vladimir Cvetic 的回答,我尝试了这个:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^src/(.*)$ /thumb.php?src= [L,QSA]
RewriteRule ^welcome/([^/]+)/?$ index.php?a=welcome&filter= [NC,QSA,L]
RewriteRule ^explore/([^/]+)/?$ index.php?a=explore&filter= [NC,QSA,L]
RewriteRule ^page/([^/]+)/?$ index.php?a=page&filter= [NC,QSA,L]
RewriteRule ^src/([^/]+)/?$ thumb.php?src= [NC,QSA,L]
RewriteRule ^(([^/]+)+)(/([^/]{0,32})(/.+)?)?$ index.php?a=&q= [L,QSA]
再次无法正常工作,这是错误:
`The 't' parameter is not set.`
但很奇怪,因为我将 't' 参数条件设置为空,如下所示:
if(!empty($_GET['t'])) {
if($_GET['t'] == 'a') {
$type = 'uploads/avatars';
$width_list = array(25, 35, 50, 70, 100, 112, 150, 200, 300);
$height_list = array(25, 35, 50, 70, 100, 112, 150, 200, 300);
} elseif($_GET['t'] == 'b') {
$type = 'uploads/backgrounds';
...
} else {
exit('Invalid parameter value');
}
} else {
$_GET['t'] == 'a';
$type = 'uploads/avatars';
$width_list = array(25, 35, 50, 70, 100, 112, 150, 200, 300);
$height_list = array(25, 35, 50, 70, 100, 112, 150, 200, 300);
}
确实如果我访问https://example.com/thumb.php?src=example.jpg
我可以正确看到头像
这应该可以解决问题:
RewriteRule ^src/(.*)$ /thumb.php?src= [L,QSA]
据我所知,TimThumb 已经多年无人维护,并且存在一个安全问题,攻击者可以在您的服务器上执行代码。快速 google search 将揭示大部分 TimThumb 漏洞。
我建议转向维护包。
在我的服务器上,我使用 TimThumb 作为调整图像大小的插件,它工作得很好,除非我尝试在我的电子邮件内容中使用它。
Google Gmail 将此 https://example.com/thumb.php?sr+c=
输出为 src
属性(注意加号)。
我看here是因为查询。
那么我如何使用 .htaccess
重写我的 url 并使用 /src/
删除 /thumb.php?src=
?
这是 link 图片的样子:
https://example.com/thumb.php?src=example.jpg
这就是我需要的
https://example.com/src/example.jpg
这是我现在的.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^welcome/([^/]+)/?$ index.php?a=welcome&filter= [NC,QSA,L]
RewriteRule ^explore/([^/]+)/?$ index.php?a=explore&filter= [NC,QSA,L]
RewriteRule ^page/([^/]+)/?$ index.php?a=page&filter= [NC,QSA,L]
RewriteRule ^(([^/]+)+)(/([^/]{0,32})(/.+)?)?$ index.php?a=&q= [L,QSA]
index.php
和 thumb.php
都在根文件夹中
更新
我试图将此行添加到我的 .htaccess
并访问 https://example.com/src/example.jpg
但它再次不起作用,在这种情况下它重定向到 "welcome" 页面。
RewriteRule ^src/([^/]*)$ /thumb.php?src= [L]
第二次更新
我也试过这个:
RewriteRule ^src/([^/]+)/?$ thumb.php?src= [NC,QSA,L]
它再次不起作用 https://example.com/src/example.jpg
重定向到我的 "welcome" 页面。
这是我的 .htaccess 现在的样子
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^welcome/([^/]+)/?$ index.php?a=welcome&filter= [NC,QSA,L]
RewriteRule ^explore/([^/]+)/?$ index.php?a=explore&filter= [NC,QSA,L]
RewriteRule ^page/([^/]+)/?$ index.php?a=page&filter= [NC,QSA,L]
RewriteRule ^src/([^/]+)/?$ thumb.php?src= [NC,QSA,L]
RewriteRule ^(([^/]+)+)(/([^/]{0,32})(/.+)?)?$ index.php?a=&q= [L,QSA]
第三次更新
在 thumb.php
这就是我构建 src 查询的方式
$_GET['src'] = 'https://s3-eu-west-1.amazonaws.com/bucket1'.'/'.$_GET['src'];
我不知道这里出了什么问题。
第四次更新
基于 Vladimir Cvetic 的回答,我尝试了这个:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^src/(.*)$ /thumb.php?src= [L,QSA]
RewriteRule ^welcome/([^/]+)/?$ index.php?a=welcome&filter= [NC,QSA,L]
RewriteRule ^explore/([^/]+)/?$ index.php?a=explore&filter= [NC,QSA,L]
RewriteRule ^page/([^/]+)/?$ index.php?a=page&filter= [NC,QSA,L]
RewriteRule ^src/([^/]+)/?$ thumb.php?src= [NC,QSA,L]
RewriteRule ^(([^/]+)+)(/([^/]{0,32})(/.+)?)?$ index.php?a=&q= [L,QSA]
再次无法正常工作,这是错误:
`The 't' parameter is not set.`
但很奇怪,因为我将 't' 参数条件设置为空,如下所示:
if(!empty($_GET['t'])) {
if($_GET['t'] == 'a') {
$type = 'uploads/avatars';
$width_list = array(25, 35, 50, 70, 100, 112, 150, 200, 300);
$height_list = array(25, 35, 50, 70, 100, 112, 150, 200, 300);
} elseif($_GET['t'] == 'b') {
$type = 'uploads/backgrounds';
...
} else {
exit('Invalid parameter value');
}
} else {
$_GET['t'] == 'a';
$type = 'uploads/avatars';
$width_list = array(25, 35, 50, 70, 100, 112, 150, 200, 300);
$height_list = array(25, 35, 50, 70, 100, 112, 150, 200, 300);
}
确实如果我访问https://example.com/thumb.php?src=example.jpg
我可以正确看到头像
这应该可以解决问题:
RewriteRule ^src/(.*)$ /thumb.php?src= [L,QSA]
据我所知,TimThumb 已经多年无人维护,并且存在一个安全问题,攻击者可以在您的服务器上执行代码。快速 google search 将揭示大部分 TimThumb 漏洞。
我建议转向维护包。