Nginx重定向到不适用于laravel应用程序的非www

Nginx重定向到不适用于laravel应用程序的非www,nginx,Nginx,我用nginx在Ubuntu 16.04.6 x64上配置了我的Laravel应用程序,当我尝试加载带有“www”前缀的站点时,我一直会看到404页面 这一切都可以完美地工作,但会导致404错误 我为www.example.com和example.com设置了指向同一IP地址的记录 理想情况下,我希望将所有流量重定向到 nginx conf文件如下所示,希望对调试有所帮助 我尝试在文件的开头和结尾添加301重定向,但似乎不起作用 有趣的是,我可以在www上很好地访问静态文件,任何一条larave

我用nginx在Ubuntu 16.04.6 x64上配置了我的Laravel应用程序,当我尝试加载带有“www”前缀的站点时,我一直会看到404页面

这一切都可以完美地工作,但会导致404错误

我为www.example.com和example.com设置了指向同一IP地址的记录

理想情况下,我希望将所有流量重定向到

nginx conf文件如下所示,希望对调试有所帮助

我尝试在文件的开头和结尾添加301重定向,但似乎不起作用

有趣的是,我可以在www上很好地访问静态文件,任何一条laravel路径似乎都会触发404

server {

    root /var/www/example.com/web/public;

    error_log /var/www/example.com/errors.log;
    access_log /var/log/nginx/example.comaccess_log.log; 

    index index.php index.html;
    server_name example.com www.example.com;
    client_max_body_size 80m;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 365d;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }



    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


}

server {
    if ($host = www.example.com) {
        return 301 https://example.com$request_uri;
    } # managed by Certbot


    if ($host = example.co) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    server_name example.com www.example.com;
    listen 80;
    return 404; # managed by Certbot

}
server {
        server_name www.example.com;
        return 301 $scheme://example.com$request_uri;
}

这种效果的东西应该可以做到这一点。如果你去,你应该被重定向到,哪个实习生重定向到


我不确定这是php还是laravel的问题,看看你展示的nginx配置,这是nginx的问题。但我想你意识到了这一点。您也没有if块,例如。com仅www.example.com我想它应该是www.hostelpass.co hostelpass.co?@Chris我认为这是nginx的问题,因为虽然我可以访问www和非www URL上的静态资产,但从www到非www的重定向在这里不起作用。如果16.04是EOL,请更新到18.04。为了试探一下你的问题,我会为
http://www.
https://www.
站点并在该虚拟主机中执行重定向,而不是尝试使用
if
。看,这对我来说太好了!我想这是把www和非www的服务器名称分成两个独立的块,谢谢!
server {
    root /var/www/example.com/web/public;

    error_log /var/www/example.com/errors.log;
    access_log /var/log/nginx/example.comaccess_log.log; 

    index index.php index.html;
    server_name example.com;
    client_max_body_size 80m;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 365d;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
    # Force all HTTP traffic to SSL
    listen 80;
    return 301 https://$host$request_uri;
}
server {
    # Redirect www.example.com to example.com
    listen 443 ssl;

    # This needs to be the cert for www.example.com or *.example.com
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # Remember, if nginx doesnt find the server_name, it uses the first vhost.
    server_name www.example.com;
    return 301 https://example.com$request_uri;
}