Как перенаправить URL-адрес в NGINX
Мне нужно перенаправить каждый 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;
}
}
Ответы
Ответ 1
Лучший способ сделать то, что вы хотите, - добавить еще один серверный блок:
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;
}
И отредактируйте переменную main_сервера server_name следующим образом:
server_name www.test.com;
Важно: Новый блок server
- это правильный способ сделать это, if
является злым. Вы должны использовать местоположения и серверы вместо if
, если это возможно. Rewrite
иногда зло тоже, поэтому заменил его на return
.
Ответ 2
Как и в случае с другим ответом, но измените http в переписывании на $-схему следующим образом:
server {
listen 80;
server_name test.com;
rewrite ^ $scheme://www.test.com$request_uri? permanent;
}
И отредактируйте переменную main_сервера server_name следующим образом:
server_name www.test.com;
Мне пришлось сделать это, чтобы перенаправить www.test.com на test.com.
Ответ 3
Сначала убедитесь, что вы установили Nginx с модулем перезаписи HTTP. Чтобы установить это, нам нужно иметь pcre-library
Как установить библиотеку 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;
}
}