denisgumerov
@denisgumerov

Как сделать автоподстановку «/» в конце url и исключить страницы без него? .htacess или nginx?

Необходимо написать правила htaccess или nginx. Что лучше даже не знаю.

Задача в том чтобы в любой url была автоподстановка "/" и чтобы:

site.com/dir - отдавал 404
site.com/dir/ - отдавал 200
site.com/dir?params - отдавал 404
site.com/dir/?params - отдавал 200
site.com/dir/index.php | html - отдавал 404

Сейчас страницы доступны и с "/" и без него. Это дубликаты для поисковых систем - говорят плохо для SEO.
  • Вопрос задан
  • 454 просмотра
Решения вопроса 2
isqua
@isqua
Научу HTML, CSS, JS, BEM и Git
Так может редиректы с безслешовых страниц на слешовые поставить, а не 404? Много 404 тоже плохо для SEO. А так все пользователи и роботы, которые заходят на безслешовые страницы, будут запоминать, что надо ходить на слешовые.

location / {
    ...
    rewrite ^((\/.*)*\/[^.]+[^\/])$ $1/ permanent;
    ...
}
Ответ написан
shambler81
@shambler81 Куратор тега htaccess
############################################################################
#### Cтандартный .htaccess для проектов студии Клондайк, версия 2.3     ####
############################################################################
RewriteEngine On
   #  Директива включает редиректы.
RewriteBase /
   # Без директивы (.*) = /$1 будет /var/wwww/site/web/$1  с директивой  = /$1
Options +FollowSymLinks
   # Разрешает переход по символическим ссылкам.

############################################################################
#### Перенаправляем протокол https на http                              ####
############################################################################
RewriteCond %{HTTPS} on
   # Проверяем наличие https в URL.
RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}
   # Перенаправляем протокол на http.

############################################################################
#### Выбор основного зеркала (или с www или без www)                    ####
############################################################################
   # 1. Редирект с www на без www. (раскоментировать директивы пункта 1)
#RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
   # Проверяем, содержит ли домен www (в начале URL).
#RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
   # Перенаправляем URL на домен без www.
####
   # 2. Редирект без www на www. (раскоментировать директивы пункта 2)
#RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
   # Проверяем, не содержит ли домен www (в начале URL).
#RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
   # Перенаправляем URL на домен c www.

############################################################################
#### Убираем повторяющиеся слеши (/) в URL                              ####
############################################################################
RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
   # Проверяем, повторяется ли слеш (//) более двух раз.
RewriteRule . %1/%2 [R=301,L]
   # Исключаем все лишние слеши.

############################################################################
#### Убираем слеши в конце 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]
   # Добавляем слеш в конце.

############################################################################
#### Убираем index.php, если он есть в конце URL                        ####
############################################################################

думаю вам этого заглаза
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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