【问题标题】:.htaccess redirect all urls using %20 to -.htaccess 使用 %20 将所有 url 重定向到 -
【发布时间】:2013-11-05 20:02:33
【问题描述】:

我遇到了重复网址的问题,例如:

/term/this-is-the-term
/term/this%20is%20the%20term

我已经通过确保所有链接都使用 - 来解决这个问题,

现在我想用%20 重定向任何索引网址,这样问题就从谷歌网站管理员那里消失了(实际上已经解决了)

如何使用%20 将任何网址重定向到-

我知道简单重定向的基础知识,但我觉得这只能使用我不太熟悉的正则表达式来实现,

有什么提示吗?

【问题讨论】:

    标签: .htaccess redirect replace


    【解决方案1】:

    试试:

    RewriteEngine On
    RewriteRule ^(.*)\ (.*)$ /$1-$2 [L,R=301]
    

    这会将任何带有空格 (%20) 的内容重定向为使用破折号。您需要将该规则放在之前您在文档根目录中的 htaccess 文件中的任何其他规则(或您希望应用此规则的任何目录中)。

    要将其应用于您的查询字符串(? 之后的所有内容),您需要做一些特别的事情:

    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^(.*)%20(.*)$
    RewriteRule ^(.*)$ /$1?%1-%2 [L,R=301,NE]
    

    【讨论】:

    • 但是使用rewrite实际上会重定向到另一个url吗?或者它只会这样读? -编辑-我正在尝试 ant 这个 url 没有被重定向:/term/?search=cocinar&termtext=queso cheddar
    • @ToniMichelCaubet 它将重定向 URI。你所拥有的是查询字符串的一部分,这需要它自己的特殊规则
    【解决方案2】:

    我认为最好的方法是:

    Redirect 301 "/term/this is the term" "http://yourdomain.com/term/this-is-the-term"
    

    【讨论】:

    • 是的,我同意。首先,在链接中有 %20 的地方单击键盘上的空格键,将 URL slug 中的 %20 更改为文字空格。然后,将整个 URL slug 用引号括起来。这也适用于我。本文更多地讨论了在 URL slug 中带有空格的单个 301 重定向:designertofullstack.com/…
    【解决方案3】:

    这是一个单一的规则,将用连字符替换所有空格,无论空格是在查询字符串中还是在 URI 中:

    RewriteEngine On
    
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+([^%20]*)%20([^\s]*) [NC]
    RewriteRule ^ /%1-%2 [L,NE,R]
    

    【讨论】:

    • 您尝试了吗:/term/this%20is%20the%20term/term/?search=cocinar&termtext=queso cheddar
    • 我刚刚用这两个 URL 重新测试了这段代码,并用连字符替换了所有空格。您的 .htaccess 中还有其他一些规则吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2018-02-22
    • 1970-01-01
    • 2012-11-25
    • 2013-08-26
    • 2014-06-08
    • 2021-05-25
    相关资源
    最近更新 更多