Как убрать слэш в конце url php
Убираем повторяющиеся слеши в конце url
Предисловие: Новая рубрика
Порой самописные сайты и сайты с корявыми CMS полны технических огрехов и недоработок, что, в свою очередь, плодит множество ошибок при индексировании сайта поисковыми системами.
Чаще эти вещи не видны невооружённым взглядом, а ещё чаще даже не предполагаются как проблема в принципе.
Открываем новую рубрику, куда будем складывать сухой код для решения проблем по части настройки сайтов, доработки движков и прочих «костылей» из серии «когда ждать разработчика нет сил и смысла. Сделаем всё сами — спасибо!».
Чит-код
Назовём её «Чит-код». В названии прекрасно всё: тут и любые многими читы, упрощающие жизнь, тут и код — команды и инструкции для программ.
Если что-то может пойти не так, именно так оно и пойдёт
Например, если страница на вашем сайте по адресу https://your-site.ru/page-with-slashes/// будет открываться без проблем и адрес в строке браузера так и останется с кучей слешей на конце, то знайте что для поисковиков:
Это четыре разные страницы. Хотя уверен, показывают они одно и тоже.
Исправляем недоразумение
Любые недоразумения с повторяющимися слешами будут редиректится в один, тем самым не плодя малополезные клоны одной страницы.
Убрать несколько слешей в конце url на Битриксе
Можно настроить редиректы в файлах конфигурации Nginx, но доступ к ним очень редко дают да и то, если сайт крутится на выделенном сервере. А это для небольших проектов, как правило, экзотика и как “пушкой по воробьям”.
Поэтому делаем «костыль» — убираем слеши в URL с помощью PHP
Как это сработало у меня.
Как это вообще возможно?!
Если честно, поисковые системы специально не будут искать такие технические дыры в вашем сайте. Боты ходят по ссылкам и по специально указанным страницам в файле sitemap.xml и шансы найти именно дубли с повторяющимися слешами маловероятны.
Но вот если кто-то специально подскажет боту, направив ссылкой, а то и не одной…
Чисто моё мнение, что вышеописанный код просто подстраховка от любителей чёрного SEO и недалёких конкурентов-технарей.
Также некоторые алерт-сервисы ругаются и надоедают, найдя возможности для пессимизации. Один раз настроил и забыл.
Если вы не знаете зачем этот файл нужен, где он находится и за что отвечает, то срочно закрывайте эту страницу!
Файл для настройки веб-сервера не место для баловства и учебных экспериментов.
Я приведу 2 кода, один всегда удаляет слэш на конце URL, а другой всегда добавляет. Начнём с 1-го варианта:
Теперь если пользователь введёт «http://mysite.ru/dir/» его автоматически перенаправит на «http://mysite.ru/dir«. Разумеется, все GET-параметры сохранятся. Например, если пользователь вводил: «http://mysite.ru/dir/?a=5&b=7«, то его перенаправит по такому адресу «http://mysite.ru/dir?a=5&b=7«.
А сейчас давайте рассмотрим вариант, когда нам обязательно нужен слэш в конце URL, то есть чтобы при вводе «http://mysite.ru/dir» был автоматический переход на «http://mysite.ru/dir/«:
С этим кодом в .htaccess слэш будет добавляться автоматически в конце URL.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 13 ):
Скажите, а можно через «.htaccess» удалить расширения файлов, к примеру было mysite.php а стало просто mysite?
Добрый день. Была такая проблема, слеш на конце ссылок. Все сделал как вы написали..все работает. Но перестало заходить в админку. Joomla. там видимо на конце тоже слеш. Как быть в таком случае?
Как быть в таком случае? Не использовать CMS.
Скажите, а как мне добавить слеш в конце для opencart, данный код не работает
Здравствуйте! Подскажите, пожалуйста, как сделать исключения для страниц с Get параметрами: т.е., везде на сайте со слешем в конце url, а на страницах с Get параметрами — без. Например: www.site.ru/catalog/ и www.site.ru/login (уже без слеша), чтобы можно было добавлять страницы в такие исключения. Спасибо!
Ребят, скажите, а реально сделать, чтобы http://site.ru/contacts.php открывался как http://site.ru/contacts/ Т.е ссылка то выглядит как ссылка на директорию contacts, но это файл. Или по старинке в папку contacts поместить index.php?
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
Дубли страниц: как добавить или убрать завершающий слеш в конце URL
Проблема из-за слэша в конце URL
Неприятность относится к области SEO (поисковой оптимизации), а именно: к дублям страниц. В отличие от случая с дублированием по www, у этого варианта больше шансов остаться незамеченным. Часто внутренние подсистемы обработки запросов самописных (а то и публично известных) фреймворков и CMS просто берут в расчет только то, что между слэшами.
Далеко за примером ходить не надо, возьмем тот же Zend Framework. Внутри этого фреймворка реализована своя система маршрутизации, в зависимости от URL-адреса, по которому обращаются к сайту. То есть, изначально не требуется воротить сложные конструкции регулярок в htaccess и довести до белого каления с десяток форумов по веб-программированию. Все обращения к сайту перенаправляются на главный скрипт index.php, внутри которого подключаются уже классы и начинает работать программная маршрутизация, распарсивая URL на части и определяя тем самым, какие классы и методы в них надо вызывать.
Например, по-умолчанию (без подробностей, объясню попроще), адрес вида http://site.ru/user/register/form/ означает, что системе следует найти модуль «user», внутри которого содержится класс со специфическим именем «RegisterController» и у этого класса вызвать метод «form()».
Но беда в том, что для определения дальнейших действий в ход идут исключительно составные части адреса, без слэшей: user, register, form. И даже если мы уберем слэш в конце URL, то получим те же самые параметры, и результат работы сайта будет тот же самый. А адреса http://site.ru/user/register/form/ и http://site.ru/user/register/form — равноценными, по которым находятся дубли страниц.
Знакомые с PHP могут попробовать самостоятельно написать простой «интерпретатор» для URL. В результате чего увидят, что отслеживать слэш в конце URL не имеет смысла. Потому создатели CMS (редко) и фреймворков (практически всегда) отдают этот вопрос на решение разработчикам и вебмастерам конкретных сайтов.
Большинство из нас именно является, самокритично выражаясь, пользователями готовых решений разной степени квалификации. Поэтому на нас ложится груз ответственности предусмотреть эту ситуацию и предохраниться от дубликатов.
Удалить слеш программно (PHP)
Для Joomla надо учесть наличие админ-интерфейса по адресу /administrator/ — там лучше не редиректить, а то циклическое перенаправление получается (код вставлять в начало index.php):
Добавить слеш программно (PHP)
Для Joomla лучше не маяться и не ставить завершающий слеш (а, наоборот, убирать). Из-за того, что
Убрать слэш / в конце URL
День добрый. Помогите разобраться с проблемой.
Но он не дает никакого эффекта. Вернее вызывает зацикливание рерайта.
Подозреваю что я натолкнулся на какой-то bug Апача, либо конкретно модуля mod_dir.
И всё же… что делать?
Файла скрипта пока не существует. Есть только папка. По идее при обращении по этому URL пока что должен прилетать 404.
DirectorySlash Off
SetHandler script-handler
Вот так, с SetHandler-ом, пробывали?
Сорри
DirectorySlash Off
SetHandler some-handler
DirectorySlash off
SetHandler script-handler
DirectorySlash on
SetHandler default-handler
Action script-handler /cgi/script.cgi
Не сказать что это проблема. Это необходимость…
Мне поставили задачу, настроить сервер таким образом, чтобы по обоим ссылкам domain.tld/script и domain.tld/script/ вызывался один и тот же скрипт. При этом существует каталог с таким именем.
И mod_dir перехватывает ссылку еще до mod_rewrite…
А диркетива DirectorySlash off не работает…
Я думал что наткнулся на баг. И что может быть кто-то уже сталкивался, и знает решение.
Пока что решили переименованием каталога со скриптом, и rewrite-ами, но загадочное поведение диркетивы DirectorySlash off интересна.
Нужно ли ставить слэш в конце URL-адреса?
Share this article
Раньше после имени папки ставился завершающий слэш, а после имени файла — нет. Папка указывает на то, что есть и другие файлы. Также у вас обычно есть индексный файл (index.html, index.php и т. д.), из которого будет загружаться контент страницы. Таким образом, контент будет поступать, скажем, из “домен.com/страница/index.html”, но пользователи увидят только “домен.com/страница/”. В случае отдельных файлов у вас будет только имя файла без слэша в конце.
В большинстве систем URL-адреса не указывают на файлы. В них URL-адрес — это запись, хранящаяся в базе данных. А бессерверные системы вообще не размещают файлы на вашем сервере.
Различные структуры URL-адресов могут обрабатываться по-разному. Решите вы использовать завершающий слэш или нет — больше является вашим личным предпочтением. Давайте рассмотрим несколько распространенных сценариев.
Завершающий слэш после имени домена не имеет значения
Эти URL-адреса обрабатываются абсолютно одинаково, так что не имеет значения, какую версию вы используете.
Завершающий слэш имеет значение при обработке других типов URL-адресов
Во всех остальных случаях, кроме употребления завершающего слэша сразу после корневого домена, URL-адрес с завершающим слэшем будет рассматриваться как отдельный URL-адрес.
Завершающий слэш не должен следовать после файла
Завершающий слэш и SEO
Здесь ваше решение зависит от того, как работают ваши системы. Вот несколько распространенных сценариев, с которыми вы можете столкнуться.
По URL-адресам с завершающим слэшем и без него отображается один и тот же контент.
Как я упоминал ранее, если ваш контент можно увидеть как на версии страницы с завершающим слэшем, так и на версии страницы без него, эти страницы можно рассматривать как отдельные URL-адреса. Здесь стоит беспокоиться о том, что одинаковый контент в разных версиях может привести к дублированию контента. В большинстве случаев это не должно быть проблемой, потому что канонический тег, скорее всего, будет указывать на предпочтительную версию. Даже, если такой тег отсутствует, Google обычно выбирает для вас предпочтительную версию, в которой они объединяют сигналы. При желании вы можете принудительно указать предпочитаемую версию URL-адреса.
Независимо от того, решите вы использовать завершающий слэш или нет, вам нужно убедиться, что различные сигналы каноникализации, такие как редиректы, карты сайта, внутренние ссылки, канонические теги и т. д. указывают на ту версию, которая должна индексироваться.
По URL-адресам с завершающим слэшем и без него отображается разный контент.
В некоторых случаях, когда у вас есть две системы, использующие одну и ту же структуру папок, или с определенным программным обеспечением для A/B‑тестирования, вы можете столкнуться с ситуацией, когда версии URL-адреса с завершающим слэшем и без него показывают совершенно разный контент. В таких случаях в идеале вам нужно выбрать одну версию для индексации и показа пользователям, а затем перенаправить на нее другую версию.
Атрибут Hreflang
Вы можете столкнуться с проблемами при более сложной настройке с применением атрибута hreflang. Ссылки с атрибутом hreflang должны указывать на проиндексированную версию страниц. Если канонический тег указывает на версию страницы с завершающим слэшем и Google индексирует именно эту версию страницы, но атрибуты hreflang указывают на версию страницы без нее, то эти атрибуты hreflang могут не соблюдаться.
Добавление или удаление завершающего слэша
Этот процесс может отличаться в зависимости от вашей системы. Прежде чем вносить какие-либо изменения, лучше всего ознакомиться с соответствующей документацией.
.htaccess
Удаление слэша:
Добавление слэша:
WordPress
Вы можете выбрать, использовать ли завершающий слэш, воспользовавшись настраиваемой структурой URL-адресов в разделе “Настройки” (Settings) > “Постоянные ссылки” (Permalinks)
/%postname%/ такой формат добавит завершающий слэш к URL-адресам
/%postname% такой формат удалит завершающий слэш из URL-адресов
Фреймворки JavaScript
Из-за своих маршрутизаторов эти системы могут немного отличаться от того, к чему вы привыкли. Вы можете либо настроить способ обработки URL-адресов в маршрутизаторе, либо, если вы не хотите тратить на это много времени, можете воспользоваться встроенными модулями для добавления или удаления завершающих слэшей, которые есть в большинстве этих систем.
Влияние завершающего слэша на отчеты
При выборе, использовать завершающий слэш или нет, необходимо учитывать обработку для отчетов. Например, в Google Search Console вы можете настроить свойство префикса домена или URL-адреса. Если при настройке свойства префикса URL-адреса вы не добавите слэш в конце (например, “домен.com/папка”), Google все равно добавит его. В результате все посещения адреса “домен.com/папка” (без завершающего слэша) не будут регистрироваться, потому что адрес “домен.com/папка/” (с завершающим слэшем) имеет преимущество.
В Google Analytics ( GA ) такая же проблема возникает при попытке анализа контента по папкам, если на основных страницах не применяется завершающий слэш. Если у вас работают обе версии URL-адресов (с завершающим слэшем и без), то в GA можно указать обе версии.
Вы можете добавить фильтр, как показано ниже, чтобы принудительно использовать завершающий слэш в URL-адресах в ваших аналитических отчетах, если вы хотите консолидировать данные.
Для этого можете использовать следующее регулярное выражение. ^(/[a-z0–9/_-]*[^/])$
Заключение
Внесение изменений всегда сопровождается определенным риском, поэтому, если ваши настройки не вызывают проблем, я бы не рекомендовал принудительно изменять структуру ваших URL-адресов. Технологии не стоят на месте, так что старое поведение завершающего слэша в URL-адресах не применимо к большинству современных веб-сайтов.