我正在尝试重定向一些过去遵循此模式的旧文件/文件夹:
文件夹名/ 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
有没有人有任何想法/提示?
答案 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.。)。我建议你查看你对+和群组的使用,以了解更多的正则表达式。在组外部使用+允许不止一次匹配同一组。在您的情况下,您希望在一个组中匹配所有这些。您还有一个嵌套组用于您不需要的文件扩展名匹配。