Мой не-www example.com
был перенаправлен на www.example.com/index.php
.
Примечание. Я перенаправляю с помощью .htaccess
а не с файлом виртуального хоста nginx.
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule (.*) http://www.example.com/$1 [L,R=301]
Если я прокомментирую строки в .htaccess
и попробуйте перенаправить через файл виртуального хоста nginx curl, который правильно настроен, но я получил 404 (модель моего сайта) при доступе www.example.com
.
Кстати, а лучше через .htaccess
или nginx? Поскольку я использую nginx в качестве прокси.
server {
listen 80;
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
location / {
try_files $uri $uri/ @proxy;
}
location @proxy {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ \.php$ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Код виртуального хоста Nginx
server {
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
}
curl -I example.com
HTTP/1.1 301 Moved Permanently
Date: Mon, 04 Dec 2017 20:39:54 GMT
Content-Type: text/html
Connection: keep-alive
Set-Cookie: __cfduid=d7048cb8bebb2c847d904c46cd78d8f0c1512419;
expires=Tue, 04-Dec-18 20:39:54 GMT; path=/; domain=.example.com; HttpOnly
Location: http://www.example.com/
Server: cloudflare-nginx
CF-RAY: 3c8193e88245-EWR
Весь сайт работает нормально, но только в индексе я получаю 403 Forbidden. Примечание: это внутреннее перенаправление, поэтому я не знаю, какой nginx или apache лучше для производительности. В apache non-www перенаправляется на www.example.com/index.php (я не хочу, чтобы этот .index.php, а в nginx перенаправлялся нормально, но я получаю 403 на домашней странице, а остальная часть сайта работает нормально.
Я помещал перенаправление внутрь того же server {}
блок, и мне нужно было поставить отдельный server {}
блок только для example.com
хост.
server {
listen 80;
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
}
server {
listen 80;
server_name www.example.com;
location / {
try_files $uri $uri/ @proxy;
}
location @proxy {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ \.php$ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}