我是一名摄影师,并且经营着一个包含数千张活动照片的网站。
多年来,许多目录的路径都发生了变化,使用新软件,对单张照片的访问也发生了变化。
我得到了这样的路径变化(还有更多规则):
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”部分可以在那里。
任何人都可以帮助我解决问题吗?非常感谢提前!
哈拉尔德
答案 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_thumbnails
,thumbnails
,photos
,当然还有照片的名称。
然后,我们将重定向到/<folder-name>/<file-name>-single.php
。
注意:在表达式中,我将[0-9]+
更改为\d+
,将[-_0-9a-zA-Z]+
更改为[\w\-]+
- 这些都是速记替代方案。< / p>