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

时间:2014-02-22 08:37:34

标签: php regex wordpress .htaccess

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

..我需要所有重定向到这个新网址的人:

我可以通过以下方式获取文件夹:

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,因为文件名不完全相同。

我看到的模式是获取OLD网址(旧金山)的前两个字,并手动提供新网址,pseduo-code:

if found san-francisco redirect /cities/san_francisco_ca
if found honolulu redirect /cities/honolulu_hi

...但我不确定如何写一个像这样复杂的正则表达式。

2 个答案:

答案 0 :(得分:1)

htaccess的重定向代码

RewriteEngine On
RewriteRule ^201\d/(san)-(antonio).*\.html$ /cities/$1_$2_tx [L,R=301,NC]
RewriteRule ^201\d/(phoenix).*\.html$ /cities/$1_az [L,R=301,NC]
RewriteRule ^201\d/(honolulu).*\.html$ /cities/$1_hi [L,R=301,NC]
RewriteRule ^201\d/(houston).*\.html$ /cities/$1_tx [L,R=301,NC]
RewriteRule ^201\d/(dallas).*\.html$ /cities/$1_tx [L,R=301,NC]
RewriteRule ^201\d/(washington).*\.html$ /cities/$1_dc [L,R=301,NC]
RewriteRule ^201\d/(philadelphia).*\.html$ /cities/$1_pa [L,R=301,NC]
RewriteRule ^201\d/(atlanta).*\.html$ /cities/$1_ga [L,R=301,NC]
RewriteRule ^201\d/(rochester).*\.html$ /cities/$1_ga [L,R=301,NC]
RewriteRule ^201\d/(minneapolis).*\.html$ /cities/$1_mn [L,R=301,NC]
RewriteRule ^201\d/(chicago).*\.html$ /cities/$1_il [L,R=301,NC]
RewriteRule ^201\d/(new)-(york).*\.html$ /cities/$1_$2_ny [L,R=301,NC]
RewriteRule ^201\d/nyc.*\.html$ /cities/new_york_ny [L,R=301,NC]
RewriteRule ^201\d/(boston).*\.html$ /cities/$1_ma [L,R=301,NC]
RewriteRule ^201\d/(seattle).*\.html$ /cities/$1_wa [L,R=301,NC]
RewriteRule ^201\d/(denver).*\.html$ /cities/$1_co [L,R=301,NC]
RewriteRule ^201\d/(san)-(francisco).*\.html$ /cities/$1_$2_ca [L,R=301,NC]
RewriteRule ^201\d/(st).?.(louis).*\.html$ /cities/$1_$2_mo [L,R=301,NC]

在那里,你会看到我的一些特殊情况。


<强>描述

NC标志会消除区分大小写。

如果您需要更多信息,请与我们联系。


另一面

正如有些人提到的另一种方法是让一个包含文件只是为你做这些重定向而不是使用htaccess这将允许你有一个城市和州的数据库,并在下面做不那么独特。

答案 1 :(得分:0)

试试这个:

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'部分在原始网址中的位置,所以我手动添加了它。