【问题标题】:Convert RedirectMatch to RewriteRule with condition使用条件将 RedirectMatch 转换为 RewriteRule
【发布时间】:2019-05-08 04:30:25
【问题描述】:

我正在尝试为我在 WordPress 上的旧永久链接结构设置一个 301 重定向到一个 postname 结构,但不会影响托管在主域子目录中的任何其他插件域。

Yoast 提供此代码:

RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(?!page/)(.+)$ https://www.example.com/$4

问题是这会影响我在根域的子目录中托管的所有插件域。所以我认为我需要将其更改为 mod_rewrite 以便我可以使用一个条件使其仅影响主域。像这样的:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteRule ^some-address / [L,R=301]

如何将 RedirectMatch 转换为正确的 RewriteRule?

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    我不太确定您希望重定向的示例 URL。但是,也许这段代码可以帮助您找出正确的 RewriteRule:

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
        RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(?!page/)(.+)$ https://www.example.com/$4 [R=302,L]
    </IfModule>
    

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
        RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(?!page/)(.+)$ https://www.example.com/$4 [R=301,L]
    </IfModule>
    

    This tool 可能会帮助您为 RewriteRule 执行正则表达式:

    图表

    此图显示了 RedirectMatch 中的表达式如何工作,您可以在此 link 中可视化其他表达式:

    每次您对.htaccess 文件进行更改时,您可能需要清除浏览历史记录,并对其进行测试以查看其是否有效。

    【讨论】:

    • 谢谢。我试图重写的路径是默认的 WordPress 永久链接结构,即 /year/monthnum/day/postname/ 到 /postname/。这是 Yoast 为此类重写提供的 RedirectMatch 代码,但它没有考虑特定域的条件(因此它不会影响子目录域)。看来我需要 RewriteCond 类似于:RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 2018-03-26
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多