Redirect 银条。如何从www.domainName重定向到domainName?

Redirect 银条。如何从www.domainName重定向到domainName?,redirect,silverstripe,Redirect,Silverstripe,我希望找到与此相反的方法: Director::forceWWW() 我的主要领域应该是 没有www.domainName.com。没有SilverStripe函数将所有www链接重定向到非www链接 相反,您可以编写一个.htaccess重写规则来执行此操作 在您的网站root.htaccess文件中,在现有的重写引擎下的行中添加以下代码: ... <IfModule mod_rewrite.c> SetEnv HTTP_MOD_REWRITE On Rewrit

我希望找到与此相反的方法:

Director::forceWWW()

我的主要领域应该是
没有www.domainName.com。

没有SilverStripe函数将所有www链接重定向到非www链接

相反,您可以编写一个
.htaccess
重写规则来执行此操作

在您的网站root
.htaccess
文件中,在现有的
重写引擎下的
行中添加以下代码:

...

<IfModule mod_rewrite.c>
    SetEnv HTTP_MOD_REWRITE On
    RewriteEngine On

    ### Redirect www links to non www links ###

    RewriteCond %{HTTP_HOST} ^www\.domainName\.com$ [NC]
    RewriteRule (.*) http://domainName.com/$1 [R=301,L]

    ...
。。。
SetEnv HTTP_MOD_重写
重新启动发动机
###将www链接重定向到非www链接###
重写cond%{HTTP_HOST}^www\.domainName\.com$[NC]
重写规则(.*)http://domainName.com/$1[R=301,L]
...

3dgoo的解决方案速度更快,因为它不涉及任何php,但我确实

class PreventWWW extends DataExtension {
    public static function stopWWW() {
        if(!(strpos($_SERVER['HTTP_HOST'], 'www') !== 0)) {
            $destURL = str_replace(Director::protocol() .'www.', Director::protocol() , 
                Director::absoluteURL($_SERVER['REQUEST_URI']));
            header("Location: $destURL", true, 301);
            die("<h1>Your browser is not accepting header redirects</h1>"
                . "<p>Please <a href=\"$destURL\">click here</a>");
        }
    }
}
因为我只是在liveenv上设置的,所以我在_config.php中设置了它

PreventWWW::stopWWW();
还可以将其设置为“仅”依赖于yml格式的环境(live/dev/stage)。看这里。。

如果您使用的是apache,您应该使用3dgoo的解决方案,因为它速度更快。如果选择使用此解决方案,请注意以下几点:如果在命令行上运行此解决方案,则会中断,因此应将其更新为check(Director::is_cli())。此外,您不需要添加yaml扩展或extend DataExtension,因为这只是一个静态方法-Director从未实例化,因此无论如何也不会应用该扩展。@micmania1您完全正确:)关于速度,我在最初的答案顶部和第二个答案中也说明了这一点-outch:(至少有人注意到了——所以我会更新。
PreventWWW::stopWWW();