我构建了一个需要重定向旧网址的网站。旧站点使用数据对象作为页面概念,因此在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?
答案 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以供参考