重定向规则不存在';我不能在我的.htaccess中工作

重定向规则不存在';我不能在我的.htaccess中工作,.htaccess,.htaccess,我绞尽脑汁想找出问题所在: 我有以下重定向规则: RewriteRule ^/productname(.*) https://website.com/category [R=301,NC,L] 但它不起作用,我也不明白为什么。因为这条规则: Redirect 301 ^/productname(.*) https://website.com/category/subcategory/productname 很好 非常感谢您的帮助 这在每个目录.htaccess文件中不起作用,因为重写规则模式

我绞尽脑汁想找出问题所在:

我有以下重定向规则:

RewriteRule ^/productname(.*) https://website.com/category [R=301,NC,L]
但它不起作用,我也不明白为什么。因为这条规则:

Redirect 301 ^/productname(.*) https://website.com/category/subcategory/productname
很好

非常感谢您的帮助

这在每个目录
.htaccess
文件中不起作用,因为
重写规则
模式匹配的URL路径小于目录前缀(
.htaccess
文件所在的文件系统路径)。目录前缀始终以斜杠结尾,因此由
重写规则
模式匹配的URL路径从不以斜杠开头

从:

在每个目录上下文(directory和.htaccess)中,模式仅与部分路径匹配,例如“/app1/index.html”请求可能导致与“app1/index.html”或“index.html”进行比较,具体取决于重写规则的定义位置

在比较之前,定义规则的目录路径将从当前映射的文件系统路径中剥离出来(最多包括一个尾随斜杠)。这种按目录前缀剥离的净结果是,此上下文中的规则仅与定义规则的当前映射文件系统路径“下方”的部分匹配

因此,您需要删除斜杠前缀,例如:

RewriteRule ^productname https://website.com/category [R=301,NC,L]
在本例中,
RewriteRule
模式的尾部
(.*)
是多余的

这条规则“行不通”。我想你的意思是
重定向匹配

请注意,
RewriteRule
Redirect
(和
RedirectMatch
)属于不同的模块。mod_rewrite和mod_alias-您应该避免混合来自这两个模块的重定向,因为您可能会遇到意外冲突

RewriteRule ^productname https://website.com/category [R=301,NC,L]
Redirect 301 ^/productname(.*) https://website.com/category/subcategory/productname