我创建了一个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配置中放置了类似的内容?
任何指向正确方向的资源/点都会非常有用。
答案 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;
}
}