Apache Mod_Rewrite定义URL变量

时间:2017-11-10 18:27:03

标签: php apache .htaccess mod-rewrite

我搜索高低,找到解决方案。我很可能只是没有使用正确的关键字。

我正在尝试重写一些图片网址来清理它们。简单的东西。

我设法从

获取网址

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个不同图像上传到服务器。

1 个答案:

答案 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]