【问题标题】:.htaccess replace RedirectMatch with RewriteRule.htaccess 用 RewriteRule 替换 RedirectMatch
【发布时间】:2021-04-12 16:38:26
【问题描述】:

我尝试在我的 .htaccess 中转换工作的 RedirectMatch

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

到 RewriteRule,但它不起作用

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>

想法

【问题讨论】:

  • 问题是RewriteRule 在分布式配置文件(“.htaccess”)中实现时在请求的 URL 的 relative 路径组件上运行。所以你的匹配模式需要以^blog/开头,而不是^/blog/ ...

标签: apache .htaccess mod-rewrite url-rewriting friendly-url


【解决方案1】:

使用您展示的示例,请尝试以下操作。请在测试您的 URL 之前清除浏览器缓存。

<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 尝试中的修复:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多