.htaccess正则表达式,重定向到新文件夹

时间:2011-10-19 23:36:25

标签: regex .htaccess mod-rewrite redirect

我正在尝试重定向一些过去遵循此模式的旧文件/文件夹:

文件夹名/ filename.extension

foldername有: (2010年或2011年)(文字A-Z a-z 0-9 _或 - )

文件名有: (文字A-Z a-z 0-9 _或 - )。扩展名

Ex:2011aug_SomeNameHere / image.jpg

新文件夹树按年组织文件(所以一切都更深一层): 2010 / FOLDERNAME / filename.extension 和 2011 / FOLDERNAME / filename.extension

Ex:2011 / 2011aug_SomeNameHere / image.jpg

我的重写有以下内容:

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /

    RewriteRule ^http://(www\.)?domain.com/path/to/+(2010|2011)+([A-Za-z\_\-])+/([A-Za-z0-9\_\-]\.([A-Za-z]))$ http://domain.com/path/to/$1/$1$2/$3 [L,R=301]

</IfModule>

在Firefox中,我正在重定向到: domain.com/path/to/2011aug_SomeNameHere/image.jpg/2011aug_SomeNameHere/image.jpg/2011aug_SomeNameHere/image.jpg ...

在Chrome中,我收到了404错误,其中包含以下网址: domain.com/path/to/2011aug_SomeNameHere/image.jpg

有没有人有任何想法/提示?

1 个答案:

答案 0 :(得分:1)

试试这个:

RewriteRule ^path/to/(2010|2011)([A-Za-z\_\-]+)/([A-Za-z0-9\_\-]+\.[A-Za-z]+)$ /path/to/$1/$1$2/$3 [L,R=301]

除非您使用一次重写处理多个域,否则不需要在重写中使用域。如果您使用www infront访问您的域名,那么您的第一个群组将是1美元(www.。)。我建议你查看你对+和群组的使用,以了解更多的正则表达式。在组外部使用+允许不止一次匹配同一组。在您的情况下,您希望在一个组中匹配所有这些。您还有一个嵌套组用于您不需要的文件扩展名匹配。