.htaccess 将 RedirectMatch 替换为 RewriteRule

.htaccess replace RedirectMatch with RewriteRule

我尝试在我的 .htaccess 中转换有效的 RedirectMatch

RedirectMatch 301 ^/babysearch/(faq|whats-new|gallery|daily-winners|prizes) /babysearch

重写规则,但它不起作用

RewriteRule ^/blog/(faq|whats-new|gallery|daily-winners|prizes)$ /blog/ [R=301,NC,L]

那是我的 mod_rewrite.c 标签

<ifModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule (.*) index.html [QSA,L]

    RedirectMatch 301 ^/blog/(faq|whats-new|gallery|daily-winners|prizes) /blog
</ifModule>

想法

使用您显示的示例,请尝试执行以下操作。请在测试您的网址之前清除浏览器缓存。

<ifModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^blog/(faq|whats-new|gallery|daily-winners|prizes)/?$ /blog/ [R=301,NC,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ index.html [QSA,L]
</ifModule>

修复 OP 的尝试:

  • 确保您的重定向在不存在的检查规则之前。
  • 然后您需要从重定向规则中删除开始 ^/,因为它永远不会满足。
  • 我们不需要在索引重写中提及 ^(.*) 只需在那里提及 ^