HTaccess中的自定义正则表达式重定向



我的旧网站结构有按年份组织的城市网址,如下所示:

  • 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 中的位置,所以我手动添加了它。

最新更新