我正在尝试为所有 .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;
}';
调用它的位置 block 是
location ~ [^a-z0-9-.\/].*.html {
rewrite ^ $old_uri permanent;
}
如果我需要提供更多信息,请告诉我
最佳答案
您可以将任何特殊字符替换为破折号/连字符
$url=~ s/\W+/-/g;
关于regex - Perl 重写旧的 URLS 以对 SEO 友好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31751240/