By riyaaaz
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!
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.
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/”.
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.
Web Server Rewrites: Still under Stores > Configuration > Web, check that “Use Web Server Rewrites” is set to Yes under the Search Engine Optimization section.
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.
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.
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.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.
Full documentation for every DigitalOcean product.
The Wave has everything you need to know about building a business, from raising funding to marketing your product.
Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.
New accounts only. By submitting your email you agree to our Privacy Policy
Scale up as you grow — whether you're running one virtual machine or ten thousand.
Sign up and get $200 in credit for your first 60 days with DigitalOcean.*
*This promotional offer applies to new accounts only.