【问题标题】:.htaccess: RedirectMatch with RewriteCond.htaccess: RedirectMatch 与 RewriteCond
【发布时间】:2017-09-15 07:19:04
【问题描述】:

我需要使用 URI 中的特定关键字重定向每个请求,只需将单个关键字替换为另一个关键字,并将其余关键字保留在 Apache 网络服务器上。

但这种行为有一个例外: 如果除了第一个关键字之外,另一个关键字是 URI 的一部分,则应该使用此重定向。

例子:

https://www.domain.tld/projects/myFirstProject 

应该被重定向到

https://www.domain.tld/references/myFirstProject

但如果关键字“projects”出现在“category”的子目录中,则不应重定向请求:

https://www.domain.tld/category/projects

这是我为 RewriteMatch 得到的,它适用于重定向,但无法处理“类别”的异常:

RedirectMatch 301 /projects(.*) /references$1

注意:URI 中除被替换关键字外的部分不应更改!

如何添加正确的 RewriteCond?我是否必须使用 RewriteCond、RewriteRule 解决方案重写 RedirectMatch?这个解决方案会是什么样子?

谢谢!

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite


    【解决方案1】:

    因此,如果您只想重定向 URL 以 projects 开头,您可以这样做:

    RewriteEngine On
    RewriteRule ^projects(/.+|$) /references$1 [L,R=301,QSA]
    

    演示:

    编辑

    或者,如果您想在任何地方进行这项工作,除非category 出现在之前 projects 在 URL 中,您可以这样做:

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !category/(.*)projects
    RewriteRule (^|/)projects(/.+|$) /references$2 [L,R=301,QSA]
    

    RewriteCond 确保仅当 URL 不包含 category 后跟 projects 时才应用 RewriteRule

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-08
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多