我的旧网站结构有按年份组织的城市网址,如下所示:
- http://www.mywebsite.com/2010/san-francisco-details.html,
- http://www.mywebsite.com/2011/san-francisco-details-1.html
- http://www.mywebsite.com/2012/san-francisco-details-1.html
- http://www.mywebsite.com/2013/san-francisco-details.html
..我需要所有这些重定向到这个新网址:
- http://www.mywebsite.com/cities/san_francisco_ca
我可以通过以下方式正确获取文件夹:
RewriteEngine On
RewriteRule ^2010/(.+?)(-[0-9]+)?$ /cities/$1 [L,R=301]
RewriteRule ^2011/(.+?)(-[0-9]+)?$ /cities/$1 [L,R=301]
RewriteRule ^2012/(.+?)(-[0-9]+)?$ /cities/$1 [L,R=301]
RewriteRule ^2013/(.+?)(-[0-9]+)?$ /cities/$1 [L,R=301]
但它当然会导致 404,因为文件名并不完全相同。
我看到的模式是获取旧网址(旧金山)的前两个单词,并手动提供新网址,pseduo-code:
if found san-francisco redirect /cities/san_francisco_ca
if found honolulu redirect /cities/honolulu_hi
。但我不确定如何编写如此复杂的正则表达式。
重定向代码
RewriteEngine On
RewriteRule ^201d/(san)-(antonio).*.html$ /cities/$1_$2_tx [L,R=301,NC]
RewriteRule ^201d/(phoenix).*.html$ /cities/$1_az [L,R=301,NC]
RewriteRule ^201d/(honolulu).*.html$ /cities/$1_hi [L,R=301,NC]
RewriteRule ^201d/(houston).*.html$ /cities/$1_tx [L,R=301,NC]
RewriteRule ^201d/(dallas).*.html$ /cities/$1_tx [L,R=301,NC]
RewriteRule ^201d/(washington).*.html$ /cities/$1_dc [L,R=301,NC]
RewriteRule ^201d/(philadelphia).*.html$ /cities/$1_pa [L,R=301,NC]
RewriteRule ^201d/(atlanta).*.html$ /cities/$1_ga [L,R=301,NC]
RewriteRule ^201d/(rochester).*.html$ /cities/$1_ga [L,R=301,NC]
RewriteRule ^201d/(minneapolis).*.html$ /cities/$1_mn [L,R=301,NC]
RewriteRule ^201d/(chicago).*.html$ /cities/$1_il [L,R=301,NC]
RewriteRule ^201d/(new)-(york).*.html$ /cities/$1_$2_ny [L,R=301,NC]
RewriteRule ^201d/nyc.*.html$ /cities/new_york_ny [L,R=301,NC]
RewriteRule ^201d/(boston).*.html$ /cities/$1_ma [L,R=301,NC]
RewriteRule ^201d/(seattle).*.html$ /cities/$1_wa [L,R=301,NC]
RewriteRule ^201d/(denver).*.html$ /cities/$1_co [L,R=301,NC]
RewriteRule ^201d/(san)-(francisco).*.html$ /cities/$1_$2_ca [L,R=301,NC]
RewriteRule ^201d/(st).?.(louis).*.html$ /cities/$1_$2_mo [L,R=301,NC]
在那里,你会看到我为你准备的一些特殊情况。
描述
NC
标志删除区分大小写。
如果您需要更多,请告诉我。
另一面
正如一些人提到的那样,另一种方法是拥有一个包含文件,该文件只是为您执行这些重定向,而不是使用htaccess
这将允许您拥有城市和州的数据库,并使以下内容不那么独特。
试试这个:
RewriteEngine On
RewriteRule ^2010/([a-z]*)-([a-z]*)-details(-[0-9])*.html$ /cities/$1_$2_ca [R=301,L]
或:
RewriteEngine On
RewriteRule ^2010/([a-z]*)-([a-z]*)-([a-z]*)(-[0-9])*.html$ /cities/$1_$2_ca [R=301,L]
当您访问时http://www.mywebsite.com/2010/san-francisco-details.html或http://www.mywebsite.com/2010/san-francisco-details-1.html
您将被重定向到http://www.mywebsite.com/cities/san_francisco_ca
我不确定"_ca"部分在原始 url 中的位置,所以我手动添加了它。