从我网站的所有链接中删除“www” - nginx

时间:2014-03-24 12:05:40

标签: ruby-on-rails nginx unicorn

我创建了一个Rails应用程序,我希望当我将任何链接指向我的网站时," www"被删除。

例如,如果有人在浏览器地址中输入http://www.mydomain.com/users,则会在页面加载时将其更改为http://mydomain.com/users

因此,如果我使用apache,我可以将这些行添加到.htaccess文件中:

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

但是我正在使用nginx和unicorn(我不确定独角兽是否与此有关)。

我是否在我的nginx配置中放置了类似的内容?

任何指向正确方向的资源/点都会非常有用。

2 个答案:

答案 0 :(得分:6)

@Ricoxor回答说,你可以使用重写来获得正确的功能;但是,这被列为Nginx Pitfalls documentation.

中的示例性陷阱

执行此操作的正确方法是编写多个服务器指令,如文档所示:

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

这更加“正确”的原因在链接的页面中描述:

  

这里实际上有三个问题。第一个是if指令。   这就是我们现在关心的问题。为什么这么糟糕?你看过If is Evil了吗?使用if指令Nginx被迫评估每个请求   所有域名。根据if指令评估每个请求   效率极低。避免使用if指令并使用两个服务器   指令如图所示。

答案 1 :(得分:-4)

试试:

Apache:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.yourDomain\.com$ [NC]
RewriteRule ^(.*)$ http://yourDomain.fr/$1 [QSA,R=301,L]

Nginx:

# nginx configuration

location / {
  if ($http_host ~* "^www\.yourDomain\.com$"){
    rewrite ^(.*)$ http://yourDomain.fr/$1 redirect;
  }
}