1

我一直在尝试为 apache 编写重写规则,以将我的 gallery2 URL 切换为 gallery3 URL 格式:

Old url example linked: http://domain.com/gallery/photoalbumxyz/photo.jpg.html
New url example needed: http://domain.com/photos/photoalbumxyz/photo

请注意,在上面的 URL 示例中,“/photoalbumxyz/photo.jpg.html”不是实际的物理目录,它只是 gallery2 重写“友好”URL 的方式。我可以使用如下规则将 /gallery/ 重写为 /photos/:

RewriteRule ^(.*)$ /photos/$1   [QSA,L,R=301]

但是,如果“.jpg.html”扩展名与 /gallery/ -> /photos/ rewrite 结合存在,我无法确定它的匹配和删除。我认为匹配的正则表达式将是 .jpg.html 来转义句点,但是我如何编写规则来删除“.jpg.html”扩展名并重写目录?

RewriteRule ^\.jpg\.html$ $1 [NC]
RewriteRule ^(.*)$ /photos/$1   [QSA,L,R=301]

编辑:对不起!我之前忽略了相册 URL 格式可以更改(不必指定照片,并且可以包含子相册),我添加了一些具体示例:

The url rewrite rule also needs to follow:
old: http://example.com/gallery
new: http://example.com/photos

old: http://example.com/gallery/album
new: http://example.com/photos/album

old: http://example.com/gallery/album/subalbum/
new: http://example.com/photos/album/subalbum/

old: http://example.com/gallery/album/subalbum/photo.jpg.html
new: http://example.com/photos/album/subalbum/photo
4

2 回答 2

1

尝试:

RedirectMatch 301 ^/gallery(.*?)(\.(jpe?g|gif|png)\.html)?$ /photos$1
于 2013-09-06T19:19:48.697 回答
0

或者使用 mod_rewrite:

RewriteRule ^/?gallery/([^/]+)/([^.]+)\.(jpe?g|gif|png)\.html$ /photos/$1/$2 [L,R=301]

您不需要该标志,因为如果您的规则目标中QSA没有 a,查询字符串将自动附加。?

于 2013-09-06T19:21:47.700 回答