regex - Perl 重写旧的 URLS 以对 SEO 友好

标签 regex perl nginx url-rewriting seo

我正在尝试为所有 .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/

相关文章:

java - 在 Linux 中从 java 执行 shell 脚本(使用 perl 和其他 shell 脚本的 shell 脚本)

python - Django 可以单独运行在 Gunicorn 上吗(没有 Apache 或 nginx)?

Python re.sub() 优化

python - 不工作Python;认为我的 grep 是罪魁祸首。

php - 如果不包含 "{"和 "}",则抓取 {...} 内的所有字符

将原始文本转换为数据列的正则表达式

perl - 是否可以保证在文档中的任何地方具有相同键的哈希值也具有相同的顺序?

Perl 文件在/内部函数之间更改包

nginx - ModSecurity 子请求白名单

Apache 和 Nginx 在一起,为什么?