我有一些旧的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>
我想念什么?
答案 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]
(并且不要忘记R
和L
标志。)
请注意,这与在服务器(或 virtualhost )上下文中使用mod_rewrite形成对比。在这个 context 中,您确实需要斜杠前缀!因为在服务器上下文中,模式与完整的URL路径匹配。
此外,此示例中的RewriteBase
指令是多余的(因为您没有使用相对的替代)。并且<IfModule mod_rewrite.c>
包装器应该被删除(除非这是为了在没有mod_rewrite的系统上起作用)。