带条件将RedirectMatch转换为RewriteRule

时间:2019-05-08 04:30:26

标签: .htaccess mod-rewrite

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

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?

1 个答案:

答案 0 :(得分:0)

对于您要重定向的示例网址,我不太确定。但是,也许这段代码可以帮助您找出正确的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做正则表达式:

enter image description here

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

enter image description here

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