重定向规则在我的.htaccess中不起作用

时间:2019-01-28 17:58:13

标签: .htaccess

我不知所措,试图找出问题所在:

我有以下重定向规则:

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

但是它不起作用,我不明白为什么。因为这条规则:

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

工作正常。

非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

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

这不适用于每个目录的.htaccess文件,因为与RewriteRule pattern 匹配的URL路径小于目录前缀( .htaccess文件所在的位置)。目录前缀始终以斜杠结尾,因此与RewriteRule pattern 匹配的URL路径永远不会以斜杠开头。

来自Apache docs for the RewriteRule directive

  

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

     

在比较之前,将定义规则的目录路径从当前映射的文件系统路径中剥离(直到并包括尾斜杠)。按目录前缀剥离的最终结果是,在这种情况下,规则仅与定义规则的当前映射文件系统路径“以下”部分匹配。

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

RewriteRule ^productname https://website.com/category [R=301,NC,L]

(.*) 上的结尾RewriteRule在此示例中是多余的。

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

此规则无法“正常运行”。我认为您的意思是RedirectMatch

请注意,RewriteRuleRedirect(以及RedirectMatch)属于不同的模块。 mod_rewrite和mod_alias-您应该避免混合使用来自两个模块的重定向,否则可能会导致意外冲突。