.htaccess:RedirectMatch with RewriteCond

时间:2017-09-15 07:19:05

标签: apache .htaccess redirect mod-rewrite

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

但是这种行为有一个例外: 如果除第一个关键字之外的其他关键字是URI的一部分,则此重定向应

示例:

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

应重定向到

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

但是如果关键字" projects"似乎位于"类别"的子目录中,不应重定向请求:

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

以下是我为RewriteMatch所获得的内容,它适用于重定向,但不能使用"类别"来处理异常:

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

演示:

修改

或者,如果您希望在网址 category之前的任何地方显示<{1}},您可以这样做:

projects

RewriteEngine On RewriteCond %{REQUEST_URI} !category/(.*)projects RewriteRule (^|/)projects(/.+|$) /references$2 [L,R=301,QSA] 确保仅当网址不包含RewriteCond后跟RewriteRule时才会应用category