【问题标题】:Case issues with a redirect and regex重定向和正则表达式的案例问题
【发布时间】:2018-11-06 04:30:59
【问题描述】:

我已经了解了如何使用(?i) 来忽略大小写,以便在 URL 中查找匹配的单词。这很好用。但这个问题不同。

我有这个网址:

https://www.publictalksoftware.co.uk/public_talks/HelpOnline/source/ASSIGN.HTM

应该是:

https://www.publictalksoftware.co.uk/public_talks/helponline/source/assign.htm

所以基本上我在这里尝试做三件事:

  1. 找到所有https://www.publictalksoftware.co.uk/public_talks/HelpOnline/source/* 链接。
  2. 强制helponline 为小写
  3. 强制*小写
  4. 所以重定向变成https://www.publictalksoftware.co.uk/public_talks/HelpOnline/source/LOWER-CASE-OF-*

我可以通过使用正则表达式的 Wordpress 301 重定向插件来做到这一点吗?

更新 1

目前我已经做到了这一点:

来源:/msa/(?i)helponline/(.*)$ 目标:https://www.publictalksoftware.co.uk/msa/helponline/$1

通过忽略案例来满足helponline 方面的需求。但是最后一个通配符呢,在目标中称为$?我需要将其强制为小写。

更新 2

我尝试使用\L$1 将最后一个标记强制为小写,但这似乎也不起作用。 #困惑

更新 3

我尝试了第一个答案,但它似乎破坏了重定向。可能是插件问题。然后事情是我正在使用大括号,所以我已经定义了一个组。所以我不明白为什么我不能在注释前加上 $1。我可能会尝试使用 htaccess 文件来代替。

【问题讨论】:

    标签: regex wordpress redirect


    【解决方案1】:

    首选方法是通过 httpd.conf 设置重定向到小写 URI:

    <IfModule mod_rewrite.c>
    RewriteMap lc int:tolower
    </IfModule>
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} [A-Z]
    RewriteRule ^(.*)$ ${lc:$1} [R=301,L]
    

    要将您的特定 URL 重定向为小写,您必须使用类似的 RuleMap 遵循相同的方法:

    RewriteCond %{REQUEST_URI} ^/public_talks/HelpOnline/source/.*$
    RewriteRule ^(.*)$ ${lc:$1} [R=301,L]
    

    \L 不起作用。 Apache/mod_rewrite 不支持。

    【讨论】:

    • 但这不会将站点中的所有 url 值更改为小写吗?我的下载文件名中有有效的大写字符,需要保持原样。
    【解决方案2】:

    要使用\L$1,您需要定义一个组,而不是您的正则表达式不包含在() 之间,它应该是。看下面demo on Regex101

    结果

    https://www.publictalksoftware.co.uk/public_talks/HelpOnline/source/ASSIGN.HTM
    

    https://www.publictalksoftware.co.uk/public_talks/helponline/source/assign.htm
    

    图片

    【讨论】:

    • 谢谢。我刚刚查看了您提供的演示,但它包含很多信息。你能隔离吗,因为我在那里看不到L$1
    • @AndrewTruckle 我以为你可以看到屏幕的Substitution 部分。我将提供一个打印屏幕
    • 是的,我明白了。但是这个 IDE 对我来说是新的。您是否建议我用() 字符包装源网址,然后我可以将\L$1 与目标链接一起使用?
    • @AndrewTruckle 你的意思是我在正则表达式中创建的组?我只是在大括号之间封装了所有内容。
    • 我得到了:(?i)(/public_talks/helponline/(.*))$https://www.publictalksoftware.co.uk/public_talks/helponline/\L$1。对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 2012-06-26
    • 2018-03-14
    • 2013-07-25
    • 2014-01-13
    相关资源
    最近更新 更多