小编典典

Nginx no-www 到 www 和 www 到 no-www

all

我正在按照教程在 Rackspace 云上使用 nginx,并且已经搜索了网络,但到目前为止无法对此进行排序。

出于 SEO 和其他原因,我希望 www.mysite.com 在 .htaccess 中正常访问 mysite.com

我的 **/etc/nginx/sites-available/www.example.com.vhost** 配置:

server {
       listen 80;
       server_name www.example.com example.com;
       root /var/www/www.example.com/web;

       if ($http_host != "www.example.com") {
                 rewrite ^ http://example.com$request_uri permanent;
       }

我也试过

server {
       listen 80;
       server_name example.com;
       root /var/www/www.example.com/web;

       if ($http_host != "www.example.com") {
                 rewrite ^ http://example.com$request_uri permanent;
       }

我也试过。第二次尝试都给出了重定向循环错误。

if ($host = 'www.example.com' ) {
rewrite ^ http://example.com$uri permanent;
}

我的 DNS 设置为标准:

site.com 192.192.6.8 A type at 300 seconds
www.site.com 192.192.6.8 A type at 300 seconds

(示例 IP 和文件夹已用于示例并在将来帮助人们)。我使用 Ubuntu 11。


阅读 98

收藏
2022-03-10

共1个答案

小编典典

HTTP 解决方案

文档中,“正确的方法是为
example.org 定义一个单独的服务器”:

server {
    listen       80;
    server_name  example.com;
    return       301 http://www.example.com$request_uri;
}

server {
    listen       80;
    server_name  www.example.com;
    ...
}

HTTPS 解决方案

对于那些想要解决方案的人,包括https://

server {
        listen 80;
        server_name www.domain.com;
        # $scheme will get the http protocol
        # and 301 is best practice for tablet, phone, desktop and seo
        return 301 $scheme://domain.com$request_uri;
}

server {
        listen 80;
        server_name domain.com;
        # here goes the rest of your config file
        # example 
        location / {

            rewrite ^/cp/login?$ /cp/login.php last;
            # etc etc...

        }
}

注意:我最初没有包含https://在我的解决方案中,因为我们使用负载平衡器并且我们的 https:// 服务器是高流量 SSL
支付服务器:我们不混合使用 https:// 和 http://。


要检查 nginx 版本,请使用nginx -v.

使用 nginx 重定向从 url 中去除 www

server {
    server_name  www.domain.com;
    rewrite ^(.*) http://domain.com$1 permanent;
}

server {
    server_name  domain.com;
    #The rest of your configuration goes here#
}

所以你需要有两个服务器代码。

使用 nginx 重定向将 www 添加到 url

如果你需要的是相反的,从 domain.com 重定向到 www.domain.com,你可以使用这个:

server {
    server_name  domain.com;
    rewrite ^(.*) http://www.domain.com$1 permanent;
}

server {
    server_name  www.domain.com;
    #The rest of your configuration goes here#
}

正如你可以想象的那样,这正好相反,工作方式与第一个示例相同。这样,您就不会降低 SEO 标记,因为它是完整的烫发重定向和移动。强制 no WWW
并显示目录!

下面显示了我的一些代码以获得更好的视图:

server {
    server_name  www.google.com;
    rewrite ^(.*) http://google.com$1 permanent;
}
server {
       listen 80;
       server_name google.com;
       index index.php index.html;
       ####
       # now pull the site from one directory #
       root /var/www/www.google.com/web;
       # done #
       location = /favicon.ico {
                log_not_found off;
                access_log off;
       }
}
2022-03-10