我需要每一个重定向http://test.com请求http://www.test.com 。 如何才能做到这一点。
在服务器块我尝试添加
rewrite ^/(.*) http://www.test.com/$1 permanent;
但在浏览器中,它说
The page isn't redirecting properly
Firefox has detected that the server is redirecting the request for
this address in a way that will never complete.
我的服务器块的样子
server {
listen 80;
server_name test.com;
client_max_body_size 10M;
client_body_buffer_size 128k;
root /home/test/test/public;
passenger_enabled on;
rails_env production;
#rewrite ^/(.*) http://www.test.com/$1 permanent;
#rewrite ^(.*)$ $scheme://www.test.com$1;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
做你想做什么最好的办法是增加另一个服务器块:
server {
#implemented by default, change if you need different ip or port
#listen *:80 | *:8000;
server_name test.com;
return 301 $scheme://www.test.com$request_uri;
}
和编辑您的主服务器块SERVER_NAME变量如下:
server_name www.test.com;
重要提示 :新server
块是这样做的正确的方式, if
是邪恶的 。 您必须使用地点和服务器,而不是if
,如果可能的。 Rewrite
有时是邪恶过 ,所以用它替换return
。
这里差不多另一个答案,但更改重写在HTTP向$方案如下所示:
server {
listen 80;
server_name test.com;
rewrite ^ $scheme://www.test.com$request_uri? permanent;
}
和编辑您的主服务器块SERVER_NAME变量如下:
server_name www.test.com;
我不得不这样做是为了www.test.com重定向到test.com。
首先确保你已经在HTTP重写模块安装Nginx的。 要安装此我们需要有PCRE库
如何安装PCRE库
如果上述提到的完成,或者如果你已经有了他们,然后只需添加下面的代码在你的nginx服务器块
if ($host !~* ^www\.) {
rewrite ^(.*)$ http://www.$host$1 permanent;
}
为了去除WWW从每一个要求,你可以使用
if ($host = 'www.your_domain.com' ) {
rewrite ^/(.*)$ http://your_domain.com/$1 permanent;
}
所以你的服务器块的样子
server {
listen 80;
server_name test.com;
if ($host !~* ^www\.) {
rewrite ^(.*)$ http://www.$host$1 permanent;
}
client_max_body_size 10M;
client_body_buffer_size 128k;
root /home/test/test/public;
passenger_enabled on;
rails_env production;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}