Слеш в ссылках — не просто так

Позабавила меня статья в Википедии. По их мнению, слеш — это такая «наклонная палочка», а слэш — это и музыкант, и жанр фанфиков. Как так получилось — не понять, все это одно слово на английском — slash.

Ладно, не о том речь. Поговорим об использовании этой «косой черты» в URL ссылок. Когда-то давно, когда весь веб был статическим (голый HTML), на слеш (/) заканчивались адреса папок, а URL документа заканчивались расширением (.html, например).

Сейчас все изменилось — балом правят динамически генерируемые страницы, CMS, clean URLs и прочее — сайт может состоять из одного файла и кучи записей в базе данных. Концепция «контейнер — документ» ушла в прошлое, а вместе с ней и принятая схема адресации — по обыкновению, CMS одинаково охотно отдают страницу по обоим адресам. В частности, этим грешит MODx, если не принять меры.

http://seoninja.ru/read/iezhyegodnyi-prazdnik-prodlyeniya-domyenov
http://seoninja.ru/read/iezhyegodnyi-prazdnik-prodlyeniya-domyenov/

По всем нормам и правилам — это 2 разных адреса (URL), 2 разных документа, поисковые системы проиндексируют оба варианта, если найдут на них ссылки. Проблема первая — дублированный контент. С этим злом нектороые CMS борятся при помощи редиректов, принимая одну из схем за основную, либо эмулируя старый подход «каталог/файл», а самые строгие вообще выдают ошибку 404 — документ не найден.

Редиректы, кстати, бывают разные: если 301 редирект передает ссылочный вес (хоть и с потерями), то 302  — нет, он еще бесполезнее, чем ссылка с nofollow. В общем, «новые компьютерные технологии» добавили удобства разработчикам и, отчасти, пользователям, но несколько затруднили жизнь оптимизаторам.

Что может случиться, если не уделять внимание слешам в адресах

  • Строгая CMS может выдать ошибку 404 Not Found
  • Глупая CMS выдаст одинаковые страницы по обоим адресам — получаем дублированный контент.
  • Сервер сделает 302 редирект, потеряется ссылочный вес
  • Самый безвредный вариант — 301 редирект, но часть ссылочного веса тоже испарится

Все это касается как внутренних ссылок сайта, так и ссылок извне (покупных, заказных или полностью бесплатных), так что проверяйте свои обратные ссылки, особенно покупные, а то можно «зевнуть» неплохую сумму совершенно впустую.

А что нужно прописать в

А что нужно прописать в хтаксесе для того, чтобы сделать редирект с url с / в конце на те же url но уже без / в конце?

Не подскажете?

Попытаюсь

Первая строчка проверяет наличие физического каталога в файловой системе на сайте. Если его нет, то выполняется редирект (вторая строчка) на url без слеша в конце.

# remove trailing slash if the url points to a non-existing folder
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]

слеш

а как написать чтобы выполнялся редирект на урл СО слешем на конце?

Просто добавить слеш к любому

Просто добавить слеш к любому запросу можно так:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301]

Выделенная строка проверяет существование файла с таким именем, чтобы не редиректить статические файлы. В последней строке в конце адреса слеш добавлен, вот и все.

ЧПУ

При таком раскладе к ЧПУ вида site.com/dir/file.html будет добавляться слеш, т.к. физически этого файла не существует.

 

Решение:

 

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !\..{1,10}$

RewriteCond %{REQUEST_URI} !(.*)/$

RewriteRule ^(.*)$ http://digee.ru/$1/ [L,R=301]

 

вторая строка исключает URI, заканчивающиеся на точку и до 10 символов после нее.

Благодарю

noys, спасибо большое за решение

Спасибо. Помогло. А то

Спасибо. Помогло. А то страница со слэшем отображалась без учёта файла css и выглядела ужасно. А гугл почему-то проиндексировал именно её.

Че-то я запутался

Че-то я запутался. Так как делать нужно?

Например cms строит такие адреса:1. site/news/novost.html - новость2. site/news - анонсы новостей

Если нажимать на ссылки мышкой, то все адреса типа 2 будут без слэшей. Но тут пользователь решит отрезать в строке novost.html, чтобы увидеть все новости и выйдет адрес site/news/

Что тогда должна выдать cms? 404 или редирект 301 (302) или выдать туже страницу с анонсами новостей?

Слэш

Всегда думал, что слэш в ссылке ни на что не влияет.

Слэш

У меня на сайте стои один компонент так именно на нем ссылки доступны со слэшем и без слэша например вот такhttp://site.com/music?view=album&id=215http://site.com/music?view=album&id=215/По пробовал в файле .htaccess не помогает, на всем сайте нормально слэш исчезает а на этом компоненте нет, подскажите пожалуйста что можно сделатьЧитал ту  что можно кроме в .htaccess сделать правки редирект программно в РНР подскажите как сделать такое можно именно в компоненте потому что на остальном сайте все нормально работает слэш удалилсяткой вот стоит кодRewriteBase /RewriteCond %{HTTP_HOST} (.*)RewriteCond %{REQUEST_URI} /$ [NC]RewriteRule ^(.*)(/)$ $1 [L,R=301]]