P
P
pomogitemne2020-07-20 10:51:23
Nginx
pomogitemne, 2020-07-20 10:51:23

Why does a 301 redirect work only once?

You need to make a 301 redirect from a page without a slash to a page with a slash in nginx.conf.

server {
rewrite ^([^.]*[^/])$ $1/ permanent;
}


But this code only works fine if you disable the WP Rocket caching plugin. If the plugin is enabled, then the redirect works only once and only after clearing the cache. Maybe you need to set some Cache-Control parameters?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
V
Viktor Taran, 2020-07-20
@shambler81

no you can't do that.
because it's not always needed.
Here is the complete algorithm when what should be.

############################################################################
#### Убираем слеши в конце URL для статических файлов (содержит точку)  ####
############################################################################
RewriteCond %{REQUEST_URI} \..+$
   # Если файл содержит точку.
RewriteCond %{REQUEST_FILENAME} !-d
   # И это не директория.
RewriteCond %{REQUEST_FILENAME} -f
   # Является файлом.
RewriteCond %{REQUEST_URI} ^(.+)/$
   # И в конце URL есть слеш.
RewriteRule ^(.+)/$ /$1 [R=301,L]
   # Исключить слеш.

############################################################################
#### Добавляем слеш(/), если его нет, и это не файл.                    ####
############################################################################
RewriteCond %{REQUEST_URI} !(.*)/$
   # Если слеша в конце нет.
RewriteCond %{REQUEST_FILENAME} !-f
   # Не является файлом.
RewriteCond %{REQUEST_URI} !\..+$
   # В URL нет точки (файл).
RewriteCond %{REQUEST_URI} ^(.+)$
 # В URL есть хоть один символы
RewriteRule ^(.*)$ $1/ [L,R=301]
  # Добавляем слеш в конце.

So you need to revise your config first.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question