我搜索高低,找到解决方案。我很可能只是没有使用正确的关键字。
我正在尝试重写一些图片网址来清理它们。简单的东西。
我设法从
获取网址 http://example.com/img/thumb.php?h=400&w=550&a=c&src=/img/stock/example.jpg
到
http://example.com/h/400/w/550/a/c/thumb/img/stock/example.jpg
使用RewriteRule ^h/(\d+)/w/(\d+)/a/([a-z]+)/thumb/(.+)$ /img/thumb.php?h=$1&w=$2&a=$3&src=$4 [L]
的简单内容。
但是我想通过在我的.htaccess文件中定义此部分来进一步清理它:h=400&w=550&a=c
从图片网址中删除h/400/w/550/a/c
,以便新的拇指网址只是{{ 1}}。
我尝试在mod_rewrite中简单地定义它,但图像没有更改为定义的大小。
http://example.com/thumb/img/stock/example.jpg
这不是正确的方法吗?
最终目标是动态创建各种图像尺寸,但使用更清晰的网址。
我正在使用我的RewriteRule ^thumb/(.+)$ /img/thumb.php?h=400&w=550&a=c&src=$1 [L]
来包含用干净网址编写的预定义大小。我正在使用五种不同的尺寸。
以下是创建这5种尺寸的线条:
.htaccess
对于# CLEAN IMAGE URLS
# CREATE VARYING SIZED IMAGES WITH PREDEFINED SIZES
RewriteRule ^img/thumb/(.+)$ /img/thumb.php?h=400&w=550&a=c&f=2&src=/img/$1 [L]
RewriteRule ^img/small/(.+)$ /img/thumb.php?h=200&w=275&a=c&f=2&src=/img/$1 [L]
RewriteRule ^img/medium/(.+)$ /img/thumb.php?h=500&w=688&a=c&f=2&src=/img/$1 [L]
RewriteRule ^img/large/(.+)$ /img/thumb.php?h=750&w=1031&a=c&f=2&src=/img/$1 [L]
RewriteRule ^img/display/(.+)$ /img/thumb.php?h=600&w=600&a=c&f=2&src=/img/$1 [L]
尺寸的图片,我只是将网址编写为medium
,并且图片的尺寸为http://example.com/img/medium/folder/img.jpg
。这使我不必将同一图像的5个不同图像上传到服务器。
答案 0 :(得分:2)
你走在正确的道路上(RewriteRule
你有合法的道路),但是你的thumb.php推理GET args可能会有轻微的问题。
如果您将print_r($_GET);exit;
添加到thumb.php的顶部,并点击此网址:
http://example.com/thumb/img/stock/example.jpg
应吐出来:
Array
(
[h] => 400
[w] => 550
[a] => c
[src] => img/stock/example.jpg
)
区别在于src
没有带前导斜杠,正如您的示例最初为旧网址提供的那样:
http://example.com/img/thumb.php?h=400&w=550&a=c&src=/img/stock/example.jpg
所以你可以解决两种方式中的一种。首先,在处理src时只需在php中添加斜杠。另一种是在重写规则中添加斜杠:
RewriteRule ^thumb/(.+)$ /img/thumb.php?h=400&w=550&a=c&src=/$1 [L]
或强>
如果您要重写以下网址:
http://example.com/h/400/w/550/a/c/thumb/img/stock/example.jpg
使用RewriteRule ^thumb/(.+)$
...然后您需要将其更改为:
RewriteRule ^(.*)thumb/(.+)$ /img/thumb.php?h=400&w=550&a=c&src=/$2 [L]