Diversia
@Diversia

Как правильно добавить слеш в конце адреса?

Есть страницы вида:
https://site.local/page/name
https://site.local/cat/name

Есть правило:
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteRule ^(.*)$ $1/ [L,R=301]

Но оно работает неправильно и отправляет посетителя:
https://site.local/var/www/vhosts/site.local/httpdocs/page/name/
https://site.local/var/www/vhosts/site.local/httpdocs/cat/name/

Нужно добавить слеш в конце с учетом, что каталога два (page и cat):
https://site.local/page/name/
https://site.local/cat/name/

Подскажите пожалуйста, как подправить правило?
  • Вопрос задан
  • 10455 просмотров
Решения вопроса 1
rework
@rework
Помог ответ? В благодарность отметь его решением
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
shambler81
@shambler81 Куратор тега htaccess
отнють не всегда его можно добавлять, а иногда нужно наоборот
############################################################################
#### Убираем слеши в конце 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 нет точки (файл).
RewriteRule ^(.*)$ $1/ [L,R=301]
   # Добавляем слеш в конце.

Часто используемые правила я более подробно описывал тут.
https://klondike-studio.ru/standards/standartnyy-h...
Ответ написан
@paladi

RewriteRule ^(.*)$ $1/ [L,R=301]
и
RewriteRule ^(.*[^/])$ $1/ [L,R=301]

Ваши правила не сработают для главной страницы, сервер выдаст ответ 200 и со слешом и без него.
Ответ написан
Комментировать
@ZardoZAntony
программист, сис. админ
Такая же проблема.
В %{REQUEST_URI} за место url прилетает полный файловый путь от корня сервера.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы