【发布时间】:2014-03-23 23:56:10
【问题描述】:
我的旧网站结构有按年份组织的城市网址,如下所示:
- 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
.. 我需要将所有这些重定向到这个新网址:
我可以通过以下方式获取文件夹:
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 url(san-francisco)的前两个单词,并手动提供新的URL,pseduo-code:
if found san-francisco redirect /cities/san_francisco_ca
if found honolulu redirect /cities/honolulu_hi
...但我不确定如何编写如此复杂的正则表达式。
【问题讨论】:
-
你有多少个城市?如果它是一个很大的数字,首先将所有重定向映射到城市字符串是最容易的。如果只有 10 个,那么您可以手动执行此操作,并且要编写正则表达式,我们需要知道您所写的所有城市……通常我会编写一些 SQL 查询,然后从这些结果中生成正则表达式。
-
您的网址中有
san-francisco,但您想重定向到san_francisco_ca注意ca部分不存在。你的正则表达式如何匹配整个san-francisco-details.html -
@Nimbuz 如果你能给出 20 个城市,然后我们会转到你需要的正则表达式。
-
@abc123 当然,这些是新城市名称:pastebin.com/0Yn4gcJC
-
@abc123 2012年城市列表为例:pastebin.com/UqVTHcdx
标签: php regex wordpress .htaccess