.htaccess RewriteRule - 需要多次替换

时间:2016-02-17 15:26:19

标签: apache .htaccess mod-rewrite

我是一名摄影师,并且经营着一个包含数千张活动照片的网站。

多年来,许多目录的路径都发生了变化,使用新软件,对单张照片的访问也发生了变化。

我得到了这样的路径变化(还有更多规则):

RewriteRule ^([0-9]{4})-major-generals-review/?(.*)$ /galleries/trooping-the-colour/$1-major-generals-review/$2 [R=301,NC,L]

RewriteRule ^([0-9]{4})-bcn-challenge/?(.*)$ /galleries/canal-and-waterway-events/$1-bcn-challenge/$2 [R=301,NC,L]

但除此之外,我还必须更换个人照片。

使用具体的例子,“旧”形式是

2013-bcn-challenge/index.php?`page=11/thumbnails/1305241839185D24543HaraldJoergens_v1.jpg&autoload=1305251137045D25451HaraldJoergens_v1`

我需要的是

galleries/canal-and-waterway-events/2013-bcn-challenge/1305241839185D24543HaraldJoergens_v1-single.php

所以需要两个替代品,

<{> 2013-bcn-challenge/galleries/canal-and-waterway-events/2013-bcn-challenge/ (那部分确实有效),

index.php?page=11/thumbnails/1305241839185D24543HaraldJoergens_v1.jpg&autoload=1305251137045D25451HaraldJoergens_v1

1305241839185D24543HaraldJoergens_v1-single.php

哪个不起作用。我的第二次替换代码是

RewriteRule (.*)/index.php?page=[0-9]+/thumbnails/([-_0-9a-zA-Z]+)\.jpg.* $1/$2-single.php  [R=301,NC]

除了其他规则之外。不幸的是,它似乎导致无休止的循环。

更糟糕的是,不是“/ thumbnails /”,而是“/ cust_thumbnails /”或“/ photos /”,“autoload”部分可以在那里。

任何人都可以帮助我解决问题吗?非常感谢提前!

哈拉尔德

1 个答案:

答案 0 :(得分:1)

问题是查询字符串(?page=...)不是请求URI的一部分,因此无法在重写模式中匹配。

因此,您需要单独检查查询字符串:

RewriteCond %{QUERY_STRING} ^page=\d+/((cust_)?thumbnails|photos)/([\w\-]+).jpg [NC]
RewriteRule ^(.*/)?index.php$ /$1%3-single.php? [R=301,NC,L]

在这里,我们正在检查查询字符串是否存在page=<num>cust_thumbnailsthumbnailsphotos,当然还有照片的名称。

然后,我们将重定向到/<folder-name>/<file-name>-single.php

注意:在表达式中,我将[0-9]+更改为\d+,将[-_0-9a-zA-Z]+更改为[\w\-]+ - 这些都是速记替代方案。< / p>