Мне нужно всегда заменять domain.com на www.domain.com и принудительно устанавливать https, поэтому конечный результат всегда должен быть https://www.domain.com при запросе domain.com или www.domain.com. Я попробовал следующее веб-сайт все еще доступен с https, но www не форсируется:

.htaccess

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Nginx

server {
    listen 80;
    server_name domain.com;

    return 301 $scheme://www.domain.com$request_uri;
}

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  www.domain.com;
        root         /path/to/project;
        location / {
                try_files $uri /app.php$is_args$args;
        }
        location ~ ^/(app_dev|config)\.php(/|$) {
                fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
                fastcgi_split_path_info ^(.+\.php)(/.*)$;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
                fastcgi_param DOCUMENT_ROOT $realpath_root;
        }
        location ~ ^/app\.php(/|$) {
                fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
                fastcgi_split_path_info ^(.+\.php)(/.*)$;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
                fastcgi_param DOCUMENT_ROOT $realpath_root;
                internal;
        }
        location ~ \.php$ {
                return 404;
        }
        location ~ /\. {
                deny all;
        }
        location ~ /.well-known {
                allow all;
        }
        error_log /path/to/error.log;
        access_log /path/to/access.log;
}
server {
        listen 443 ssl;

        server_name  www.domain.com;

        ..rest of code..
}

nginx другой подход

server {
    listen      80;
    server_name domain.com;
    rewrite     ^   https://www.domain.com$request_uri? permanent;
}

и несколько других подходов, найденных в поиске, но, кажется, ничего не работает для меня, я был бы признателен за любую помощь. Заранее спасибо.

2 ответа2

2

HTTP для HTTPS:

server {
        listen 80;
        server_name *;
        location / {
                return 302 https://$host$request_uri;
        }
}

Не WWW в WWW:

server {
        server_name domain-without-www.com;
        listen 443 ssl;
        location / {
                return 302 https://www.$host$request_uri;
        }
}

Обязательно замените домены и имеющие дополнительный блок server именем server_name с именем www.domain.com .

0

Я нашел решение для размещения ссылки:

для http

location / {
           if ($http_host !~ "^www\."){
                  rewrite ^(.*)$ http://www.$http_host$1 redirect;
           }
           try_files $uri /app.php$is_args$args;
}

для https

location / {
        if ($http_host !~ "^www\."){
                rewrite ^(.*)$ https://www.$http_host$1 redirect;
        }
        try_files $uri /app.php$is_args$args;
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .