Перенаправление 301 проблема Apache за Nginx

Мой не-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 на домашней странице, а остальная часть сайта работает нормально.

2
задан 6 December 2017 в 06:20
1 ответ

Я помещал перенаправление в тот же блок server {} , и мне нужно было добавить отдельный блок server {} только для example.com host.

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;
    }
}
1
ответ дан 3 December 2019 в 12:34

Теги

Похожие вопросы