htaccess重定向规则链优先级

时间:2016-12-23 13:30:01

标签: wordpress .htaccess redirect

几年前,我将所有的wordpress网址重定向到

/blog/YYYY/MM/DD/[TITLE] 

/blog/[TITLE]

现在我删除了/ blog /,以便重定向我的所有网址

/blog/[TITLE]

/[TITLE]

这项工作很棒。但问题出在这里:

现在这些网址

/blog/YYYY/MM/DD/[TITLE]

重定向到

/YYYY/MM/DD/[TITLE]

结果:404

以下是我的重定向规则:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RedirectMatch 301 /blog/([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ /blog/$4

RewriteRule ^blog/(.*)$ /$1 [R=301,L,NC]

RewriteCond %{REQUEST_URI} ^/blog[/]?$
RewriteRule (.*) / [R=301,L]

我该如何解决这个问题?任何的想法?说实话:我从来没有真正理解这是如何运作的。 ;-)

1 个答案:

答案 0 :(得分:1)

这个想法是在没有使用的情况下使用链接请求301重定向到用户,直到它没有使用apache重写规则在内部解决。并且只有最新请求通过301重定向规则向用户公开。

# Redirect to site without www.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

# redirect /blog/YYYY/MM/DD/[TITLE] -> /blog/[TITLE]
RewriteRule ^blog/([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ /blog/$4 [NC]
# continue chain, redirect /blog/[TITLE] -> /[TITLE]
RewriteRule ^blog/(.*)$ /$1 [L,NC,R=301]