如何使用htaccess重定向基于其段的URL?

时间:2018-11-30 15:10:35

标签: .htaccess redirect mod-rewrite

我有一些旧的URL,此后已更改。现在,它们将转到我的404页面,因此我需要将它们重定向到新的URL。原始网址如下:

http://example.com/en/blog/events-private/name-of-event

新的URL如下所示,没有“博客”段:

http://example.com/en/events-private/name-of-event

这是我正在尝试的方法,但是不起作用:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^/en/blog/events-private/(.*) /en/events-private/$1
</IfModule>

我想念什么?

2 个答案:

答案 0 :(得分:1)

这不是使用mod_rewrite,但这似乎可行:

RedirectMatch 301 ^/en/blog/events-private/(.*) /en/events-private/$1

答案 1 :(得分:0)

RewriteRule ^/en/blog/events-private/(.*) /en/events-private/$1

.htaccess中,RewriteRule 模式会首先删除目录前缀(导致生成.htaccess文件)后与URL路径匹配。目录前缀始终以斜杠结尾,因此此处匹配的URL路径绝不能以斜杠开头。换句话说,您只需要删除斜杠前缀即可:

RewriteRule ^en/blog/events-private/(.*) /en/events-private/$1 [R=301,L]

(并且不要忘记RL标志。)

请注意,这与在服务器(或 virtualhost )上下文中使用mod_rewrite形成对比。在这个 context 中,您确实需要斜杠前缀!因为在服务器上下文中,模式与完整的URL路径匹配。

此外,此示例中的RewriteBase指令是多余的(因为您没有使用相对的替代)。并且<IfModule mod_rewrite.c>包装器应该被删除(除非这是为了在没有mod_rewrite的系统上起作用)。