【发布时间】:2015-10-23 10:22:12
【问题描述】:
我正在尝试修复所有 .html 请求中包含错误字符的旧 URL
我想用破折号 (-) 替换以下实例:
- 空间
- 昏迷
- 加号
- 括号
- 撇号
- 双破折号加单破折号
- 然后所有的大写和小写
以下已实现,在服务器上不起作用
我已经重写了 nginx 正在使用的 perl 片段,如下所示:
perl_set $old_uri 'sub {
my $r = shift;
my $uri = $r->uri;
$uri = lc $uri;
$uri =~ s/[+, ()\']/-/g;
$uri =~ s/--+/-/g;
return $uri;
}';
这会将所有内容转换为小写,将请求的符号转换为破折号,然后将连续的多个破折号压缩为一个
perl 的规则是
perl_set $old_uri 'sub {
my $r = shift;
my $uri = $r->uri;
$uri = lc $uri; # Upper to lower
$uri =~ s/[^a-z0-9-.\/]/-/g;
$uri =~ s/--+/-/g; # turn double -- to -
return $uri;
}';
调用这个的位置块是
location ~ [^a-z0-9-.\/].*.html {
rewrite ^ $old_uri permanent;
}
如果我需要提供更多信息,请告诉我
【问题讨论】:
-
你能举一个 URI 的例子以及它重写的内容吗?
-
我有一些错误的 url,所以这里有一些是错误的 domain.com/DVDC/Yes+man's house.html 需要重定向到 domain.com/dvdc/yes-man-s -house.html
标签: regex perl nginx url-rewriting seo