Question

We are trying to remove the trailing slash from our URLs (primarily so that duplicate content is not being served).

I know there are many tutorials about how to do this, and I have succeeded in changing the core code so all links are to non-slash URLs. However I am struggling to do the rewrites for anyone who follows a link (or enters one manually) with the trailing slash.

All the tutorials I have read say to change the htaccess file, which after much digging I found out is not being used on our server. So I’m trying to use a rewrite in the DOMAIN.conf file (which is pulled in to the nginx.conf file).

I proposed this to our server hosts;

rewrite ^/(.*)/$ /$1 permanent;

But they said: “That appears to be correct, however we do not support this.” and gave me a link to an online htaccess tester.

Currently our .conf file contains this;

server {  listen <server IP>:80;  server_name www.DOMAIN.co.uk;  root <server root>;

location / {  index index.html index.php;  try_files $uri $uri/ @handler;  expires 30d; 
#auth_basic “Restricted”; 
#auth_basic_user_file /var/www/htpasswd;  }

location /app/ { deny all; }  location /includes/ { deny all; }  location /lib/ { deny all; }  location /media/downloadable/ { deny all; }  location /pkginfo/ { deny all; }  location /report/config.xml { deny all; }  location /var/ { deny all; }

location /. {  return 404;  }

location @handler {  rewrite / /index.php;  }

location ~ .php/ {  rewrite ^(.*.php)/ $1 last;  }

location ~ .php$ {  if (!-e $request_filename) { rewrite / /index.php last; }

expires off;  fastcgi_pass <password>;  fastcgi_param HTTPS $fastcgi_https;  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
# fastcgi_param MAGE_RUN_CODE default; 
# fastcgi_param MAGE_RUN_TYPE store;  include fastcgi_params;  } 


## 
# SEO REWRITES 
##  ...............

(edited to remove certain things and shortened to relevant info).

Can anyone help with what the rewrite would need to be?

Was it helpful?

Solution

Two things to note, duplicate content is not to be treated as an issue if you are using canonical links, as if you read the google and bing white docs they will follow that for what is indexed when dealing with duplicate content. Just asking, is the juice worth the squeeze? But this is what I have as my store config and don't see to have the trailing / issue as you describe.

store

server {
## Limits remote clients to no more than 10 concurrently "open"
## connections per remote ip address.
#limit_conn arbeit 10;
listen      80;
server_name store.domain.xxx;
root /usr/share/nginx/html/store;
access_log /usr/share/nginx/html/logs/access.log;
error_log /usr/share/nginx/html/logs/error.log notice;
dav_methods  PUT; #for rest api
location / {
    index index.html index.php; ## Allow a static html file to be shown first
    try_files $uri $uri/ @handler; ## If missing pass the URI to Magento's front handler
    expires 30d; ## Assume all files are cachable
}
## These locations would be hidden by .htaccess normally
location ^~ /app/                { deny all; }
location ^~ /includes/           { deny all; }
location ^~ /lib/                { deny all; }
location ^~ /media/downloadable/ { deny all; }
location ^~ /pkginfo/            { deny all; }
location ^~ /report/config.xml   { deny all; }
location ^~ /var/                { deny all; }
location ^~ /var/cache/packages/ { allow all; }


location /var/export/ { ## Allow admins only to view export folder
    auth_basic           "Restricted"; ## Message shown in login window
    auth_basic_user_file htpasswd; ## See /etc/nginx/htpassword
    autoindex            on;
}

location /api {
    # rewrite ^/api/rest /api.php?type=rest  break;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_pass http://localhost:8888;
}

location  /. { ## Disable .htaccess and other hidden files
    return 404;
}

location @handler { ## Magento uses a common front handler
    rewrite / /index.php;
}

location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
    rewrite ^(.*.php)/ $1 last;
}

## Execute PHP scripts
location ~ .php$ { ## Execute PHP scripts
    expires off; ## Do not cache dynamic content
    include /etc/nginx/fastcgi_params;



    fastcgi_pass   unix:/tmp/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param MAGE_RUN_CODE default;
    fastcgi_param MAGE_RUN_TYPE store;
}
}
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top