15

SEO の目的で /index.html を / に書き換えようとしています (index.html を / と混同し、重複したコンテンツに対してペナルティを科す愚かな検索エンジン) - また、Web 分析データを調整します。

stackoverflow や nginx のドキュメントなどで見つけたすべてのソリューションを試しましたが、成功しませんでした。私は、他の設定の問題か、痛々しいほど明らかな何かが必要だと考えています。これは私の最初のnginxのインストールです - ApacheとIISに慣れています!!

これが私のdefault.confです:

server {
    listen       80;
    server_name  web.local;
    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /var/www/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

ここに私の virtual.conf があります (コメントアウトされたセクションは私の最近の試みでした - コメントを外すと、www.domain.com/index.html にアクセスしようとすると 301 Moved Permanently エラーが発生します):

server {
    listen       80;
    server_name  www.domain.com;

    location / {
        root   /var/www/html/domain.com;
        index  index.html;
        #if ($request_uri = /index.html) {
        #    rewrite ^ http://www.domain.com permanent;
        #}
    }
}

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

cobaco のソリューションの HTTP 応答ヘッダー:

URL:
http://www.domain.com
http/1.1 301 moved permanently
server: nginx/1.2.8
date: Thu, 16 May 2013 01:42:58 GMT
content-type: text/html
content-length: 184
connection: keep-alive
location: http://domain.com/

Redirecting URL:
http://domain.com/
http/1.1 301 moved permanently
server: nginx/1.2.8
date: Thu, 16 May 2013 01:42:58 GMT
content-type: text/html
content-length: 184
connection: keep-alive
location: http://www.domain.com/

「location = /index.html {return 301 $scheme://domain.com/;}」という行が問題を引き起こしているのではないかと考えたので、www. 「scheme://」の後 -- これが悪いことであるかどうか教えてください! これにより、次の HTTP 応答ヘッダーが生成されました。

URL:
http://www.domain.com
http/1.1 301 moved permanently
server: nginx/1.2.8
date: Thu, 16 May 2013 01:42:58 GMT
content-type: text/html
content-length: 184
connection: keep-alive
location: http://www.domain.com/

Redirecting URL:
http://www.domain.com/
http/1.1 301 moved permanently
server: nginx/1.2.8
date: Thu, 16 May 2013 01:42:58 GMT
content-type: text/html
content-length: 184
connection: keep-alive
location: http://www.domain.com/

さらにいじくり回した後、次の構成は私がやりたいことを行いますが、if ステートメントのために理想的ではありません。助言がありますか?

server {
  server_name  www.domain.com;
  root /var/www/html/domain.com;
  index index.html;
  if ($request_uri = /index.html) {
      return 301 http://www.domain.com/;
  }
  #location = /index.html {
  #    return 301 $scheme://www.domain.com/;
  #}
}

server {
  listen 80;
  server_name domain.com;
  return 301 $scheme://www.domain.com$request_uri;
}
4

3 に答える 3

1

以下はあなたが望むことをします:

server {
  server_name  www.domain.com;
  root /var/www/html/domain.com;
  index index.html;
  location = /index.html {return 301 $scheme://www.domain.com/;}
}

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

注意します:

  • location可能な場合は代わりにブロックを使用してくださいif(if内部でlocationは問題が発生することが知られているため、詳細についてはhttp://wiki.nginx.org/IfIsEvilを参照してください)
  • 301には使用しreturnないrewriteでください(より効率的であるため)
  • 正規表現マッチングの代わりに組み込み変数を使用します (より効率的であるため、組み込み変数のリストについてはhttp://wiki.nginx.org/HttpCoreModule#Variablesを参照してください)。
  • rootディレクティブは通常、index常に -block のメイン レベルにあるserver必要があります (それ以外の場合は、サブブロックごとに繰り返す必要があります)。
于 2013-05-14T13:05:38.080 に答える