.htaccess 将重定向匹配转换为具有条件的重写规则

.htaccess 将重定向匹配转换为具有条件的重写规则,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我正试图在WordPress上为我的旧permalink结构设置301重定向到postname结构,但不会影响主域子目录中托管的任何其他加载项域 Yoast提供了以下代码: RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(?!page/)(.+)$ https://www.example.com/$4 问题是,这会影响我在根域的子目录中托管的所有附加域。所以我想我需要将它改为mod_rewrite,这样我就可以使用一个条件,使它只影响

我正试图在WordPress上为我的旧permalink结构设置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转换为正确的重写规则?

我不太确定您希望重定向的示例URL。但是,此代码可能会帮助您找出正确的重写规则:

<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>

重新启动发动机
重写cond%{HTTP_HOST}^(www\)?示例\.com$[NC]
重写规则^([0-9]{4})/([0-9]{2})/([0-9]{2})/(?!page/)(.+)$https://www.example.com/$4[R=302,L]


重新启动发动机
重写cond%{HTTP_HOST}^(www\)?示例\.com$[NC]
重写规则^([0-9]{4})/([0-9]{2})/([0-9]{2})/(?!page/)(.+)$https://www.example.com/$4[R=301,L]
可能会帮助您为重写规则执行正则表达式:

<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>

图表 此图显示了RedirectMatch中的表达式的工作方式,您可以通过以下方式可视化其他表达式:


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

我不太确定您希望重定向的示例URL。但是,此代码可能会帮助您找出正确的重写规则:

<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>

重新启动发动机
重写cond%{HTTP_HOST}^(www\)?示例\.com$[NC]
重写规则^([0-9]{4})/([0-9]{2})/([0-9]{2})/(?!page/)(.+)$https://www.example.com/$4[R=302,L]


重新启动发动机
重写cond%{HTTP_HOST}^(www\)?示例\.com$[NC]
重写规则^([0-9]{4})/([0-9]{2})/([0-9]{2})/(?!page/)(.+)$https://www.example.com/$4[R=301,L]
可能会帮助您为重写规则执行正则表达式:

<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>

图表 此图显示了RedirectMatch中的表达式的工作方式,您可以通过以下方式可视化其他表达式:


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

谢谢。我试图重写的路径是默认的WordPress permalink结构,即/year/monthnum/day/postname/到just/postname/。这是Yoast为这种重写提供的RedirectMatch代码,但它没有考虑特定域的条件(因此不会影响子目录域)。似乎我需要RewriteCond是这样的:
RewriteCond%{HTTP\u HOST}^(www\)?example\.com$[NC]
谢谢。我试图重写的路径是默认的WordPress permalink结构,即/year/monthnum/day/postname/到just/postname/。这是Yoast为这种重写提供的RedirectMatch代码,但它没有考虑特定域的条件(因此不会影响子目录域)。似乎我需要RewriteCond是这样的:
RewriteCond%{HTTP\u HOST}^(www\)?example\.com$[NC]