Silverstripe和301 RedirectMatch

时间:2014-08-23 23:16:50

标签: silverstripe

我构建了一个需要重定向旧网址的网站。旧站点使用数据对象作为页面概念,因此在example.com/news/view/my-post中找到了博客条目。新站点使用博客模块,因此现在可以在example.com/news/my-post找到博客条目。我尝试将以下重定向添加到我的htaccess:

RedirectMatch permanent ^/news/view/(.+) http://www.example.com/news/$1

当我导航到一个旧帖子,例如,带有上述RedirectMatch的example.com/news/view/my-post时,我得到以下网址:mysite.com/news/my-post?url= / news / view / my-post并从Silverstripe获得404

另一个奇怪的行为是,当我追加任何东西但是?url = *(例如?一切=一切,我都没有得到404页面。)

Silverstripe是否将?url = / news / view / my-post附加到网址?如何添加RedirectMatch并且不从Silverstripe接收404?

1 个答案:

答案 0 :(得分:4)

我相信apache的mod_alias(提供RedirectMatch指令)与mod_rewrite冲突。改为使用mod_rewrite - 并且在默认情况下SilverStripe通常放在其.htaccess文件中之前,请注意插入规则。

规则如下:

RewriteEngine On
RewriteRule ^news/view/(.*)$ /news/$1 [R=301,NC,L]

... SilverStripe Rules come after this.

RewriteEngine On确保将处理这些重写规则。可以多次在虚拟主机/ .htaccess中使用它 - 但请记住,只有在第一次出现之后出现的规则才会被处理。我通常把它放在我的虚拟主机定义中。

[R=301]表示永久301重定向。如果它是临时的,请使用[R = 302]。

[NC]用于忽略大小写,使正则表达式匹配不区分大小写。

[L]将立即返回此规则,并停止处理后续规则。

http://httpd.apache.org/docs/current/mod/mod_rewrite.html以供参考