使用正则表达式捕获带有ascii编码字符的URL

时间:2013-11-12 16:32:19

标签: regex .htaccess

将Wordpress网站迁移到新版本后,我需要捕获大量旧网址并将其重定向到新网站上的相同内容。问题是旧网站有很多带有ascii编码字符的网址,Wordpress已将其删除到当前网站上。例如:

/blog/uncategorized/germany%E2%80%99s-ageing-population-working-longer-working-better.html

将重定向到:

/blog/germanys-ageing-population-working-longer-working-better/

任何人都可以提供一个可以删除ascii编码字符的正则表达式吗?

2 个答案:

答案 0 :(得分:3)

为了匹配编码字符,您将使用以下正则表达式模式:

%[A-Z0-9]{2}

如何执行替换将取决于您使用的语言/工具。

答案 1 :(得分:1)

您必须在此处与请求进行匹配,因为使用重定向和重写规则,URI在应用模式之前已解码。这意味着您将匹配â之类的内容而不是编码字符串。所以你会想要这样的东西:

RewriteEngine On
RewriteCond %{THE_REQUEST} \ /blog/([^\?\ ]*)\%[A-Z0-9]{2}([^\?\ ]*)
RewriteRule ^ /blog/%1%2 [L,R=301,NE]