Report this

What is the reason for this report?

More than one redirect with trailing slash in secure non-www url

Posted on December 25, 2019

There is more than one redirect with trailing slash in secure non-www url. As you can see from below a secure non-www url is forwarded to a url with trailing slash and then again forwarded to one with no slash. I am running magento 2.3.3, Nginx, PHP 7.3 on centos 7. Below is my nginx conf file. Please note that other redirects are fine. Issue is only with secure non-www url. Any clue would be highly appreciated.

https://example.com/mens-wear https://www.example.com/mens-wear/ https://www.example.com/mens-wear

server {
    listen      443 ssl http2;
    server_name example.com www.example.com;
    ssl_protocols       TLSv1.2  TLSv1.3;

    ssl_certificate      /home/example/conf/web/ssl.example.com.pem;
    ssl_certificate_key  /home/example/conf/web/ssl.example.com.key;

    location / {
        proxy_pass http://127.0.0.1:6081;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Ssl-Offloaded "1";
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Port 443;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen    8080;
    server_name example.com www.example.com;
    set $MAGE_ROOT /home/example/web/example.com/public_html/pub;
    set $MAGE_MODE production; # or production

    include	/home/example/web/example.com/public_html/nginx.conf.sample;

}



root $MAGE_ROOT;

index index.php;
autoindex off;
charset UTF-8;
error_page 404 403 = /errors/404.php;
#add_header "X-UA-Compatible" "IE=Edge";


# Deny access to sensitive files
location /.user.ini {
    deny all;
}

# PHP entry point for setup application
location ~* ^/setup($|/) {
    root $MAGE_ROOT;
    location ~ ^/setup/index.php {
        fastcgi_pass   127.0.0.1:9002;

        fastcgi_param  PHP_FLAG  "session.auto_start=off \n suhosin.session.cryptua=off";
        fastcgi_param  PHP_VALUE "memory_limit=2048M \n max_execution_time=18000";
        fastcgi_read_timeout 600s;
        fastcgi_connect_timeout 600s;

        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ ^/setup/(?!pub/). {
        deny all;
    }

    location ~ ^/setup/pub/ {
        add_header X-Frame-Options "SAMEORIGIN";
    }
}

# PHP entry point for update application
location ~* ^/update($|/) {
    root $MAGE_ROOT;

    location ~ ^/update/index.php {
        fastcgi_split_path_info ^(/update/index.php)(/.+)$;
        fastcgi_pass   127.0.0.1:9002;
       
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO        $fastcgi_path_info;
        include        fastcgi_params;
    }

    # Deny everything but index.php
    location ~ ^/update/(?!pub/). {
        deny all;
    }

    location ~ ^/update/pub/ {
        add_header X-Frame-Options "SAMEORIGIN";
    }
}

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

location /pub/ {
    location ~ ^/pub/media/(downloadable|customer|import|theme_customization/.*\.xml) {
        deny all;
    }
    alias $MAGE_ROOT/pub/;
    add_header X-Frame-Options "SAMEORIGIN";
}

location /static/ {
    # Uncomment the following line in production mode
     expires max;

    # Remove signature of the static files that is used to overcome the browser cache
    location ~ ^/static/version {
        rewrite ^/static/(version\d*/)?(.*)$ /static/$2 last;
    }

    location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2|json)$ {
        add_header Cache-Control "public";
        add_header X-Frame-Options "SAMEORIGIN";
        include /home/example/web/example.com/public_html/magento2-cors.conf;           
        expires +1y;

        if (!-f $request_filename) {
            rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
        }
    }
    location ~* \.(zip|gz|gzip|bz2|csv|xml)$ {
        add_header Cache-Control "no-store";
        add_header X-Frame-Options "SAMEORIGIN";
        include /home/example/web/example.com/public_html/magento2-cors.conf;           
        expires    off;

        if (!-f $request_filename) {
           rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
        }
    }
    if (!-f $request_filename) {
        rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
    }
    add_header X-Frame-Options "SAMEORIGIN";
    include /home/example/web/example.com/public_html/magento2-cors.conf;           

}

location /media/ {
    try_files $uri $uri/ /get.php$is_args$args;

    location ~ ^/media/theme_customization/.*\.xml {
        deny all;
    }

    location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ {
        add_header Cache-Control "public";
        add_header X-Frame-Options "SAMEORIGIN";
        include /home/example/web/example.com/public_html/magento2-cors.conf;           

        expires +1y;
        try_files $uri $uri/ /get.php$is_args$args;
    }
    location ~* \.(zip|gz|gzip|bz2|csv|xml)$ {
        add_header Cache-Control "no-store";
        add_header X-Frame-Options "SAMEORIGIN";
        include /home/example/web/example.com/public_html/magento2-cors.conf;           
       
        expires    off;
        try_files $uri $uri/ /get.php$is_args$args;
    }
    add_header X-Frame-Options "SAMEORIGIN";
    include /home/example/web/example.com/public_html/magento2-cors.conf;           

}

location /media/customer/ {
    deny all;
}

location /media/downloadable/ {
    deny all;
}

location /media/import/ {
    deny all;
}
location /errors/ {
    location ~* \.xml$ {
        deny all;
    }
}

# PHP entry point for main application
location ~ ^/(index|get|static|errors/report|errors/404|errors/503|health_check|info)\.php$ {
    try_files $uri =404;
    fastcgi_pass   127.0.0.1:9002;
   
    fastcgi_buffer_size 16k;
    fastcgi_buffers 4 16k;

    fastcgi_param  PHP_FLAG  "session.auto_start=off \n suhosin.session.cryptua=off";
    fastcgi_param  PHP_VALUE "memory_limit=2048M \n max_execution_time=18000";
    fastcgi_read_timeout 600s;
    fastcgi_connect_timeout 600s;

    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

gzip on;
gzip_disable "msie6";

gzip_comp_level 6;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_proxied any;
gzip_types
    text/plain
    text/css
    text/js
    text/xml
    text/javascript
    application/javascript
    application/x-javascript
    application/json
    application/xml
    application/xml+rss
    image/svg+xml;
gzip_vary on;

# Banned locations (only reached if the earlier PHP entry point regexes don't match)
location ~* (\.php$|\.phtml$|\.htaccess$|\.git) {
    deny all;
}



This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

The issue you are experiencing might be related to Magento’s redirection settings, a misconfiguration on the server, or a combination of both. Here are some steps to help you troubleshoot and resolve this issue.

  1. Check your Magento’s URL settings: Make sure you have the correct URLs set in your Magento configuration. Go to Stores > Configuration > Web and check both your Unsecure and Secure Base URLs. They should be “https://www.example.com/”.

  2. Canonical URLs: Check your settings under Stores > Configuration > Catalog > Catalog > Search Engine Optimization. Make sure you have “Use Canonical Link Meta Tag For Categories” and “Use Canonical Link Meta Tag For Products” set to Yes.

  3. Web Server Rewrites: Still under Stores > Configuration > Web, check that “Use Web Server Rewrites” is set to Yes under the Search Engine Optimization section.

  4. Check Nginx Configuration: In your Nginx configuration, the server blocks that are supposed to handle the www and non-www redirects could be misconfigured. It would be ideal to separate these into two different server blocks, where one server block will handle requests for the non-www (example.com) and another server block will handle requests for the www (www.example.com).

Here’s an example of how you might want to adjust your Nginx configuration:

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

server {
    listen      443 ssl http2;
    server_name www.example.com;
    # The rest of your configuration
}

This configuration will make any request that hits example.com be redirected to www.example.com with the appropriate scheme and request URI.

  1. Trailing Slashes: The issue with the trailing slash could be related to the way Magento handles this. It’s designed to add a trailing slash to category URLs. It could also be due to the try_files $uri $uri/ /index.php$is_args$args; directive in your Nginx configuration. You might want to experiment with removing the $uri/ part.

  2. Clear Cache: After making changes, ensure you clear Magento’s cache from the Admin dashboard or by running bin/magento cache:clean from the command line.

Please backup any configurations before making changes and apply changes cautiously, verifying at each stage if the desired result has been achieved.

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.