Задать вопрос
direwolf
@direwolf
Начинающий веб-разработчик

Как сделать так, чтобы сервер принимал адресы со слеэшем в конце и без слэша?

Имеется сайт. Некоторые страницы имеют слеш в конце адреса, а некоторые нет. Задача в том, чтобы настроить сервер так, чтобы грузил страницы и со слэшем и без слэша в конце адреса. Проблема в том, что когда убираешь слэш или добавляешь слэш, то автоматически выкидывает на 404 страницу. Помогите пожалуйста.
  • Вопрос задан
  • 433 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
дополните htaccess следующими правилами, для сео лучше определиться чтобы слеши были либо их не было:
# Убираем несколько слешей в урле
RewriteCond %{THE_REQUEST} \s/+(.*?)/{2,}([^\s]*)
RewriteRule ^ %1/%2 [R=302,L,NE]
# Убираем последний слеш в урле
RewriteCond %{HTTP_HOST} (.*)
RewriteCond %{REQUEST_URI} (/+)$ [NC]
RewriteRule ^(.*)(/)$ $1 [L,R=301]
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Вы не указали никаких подробностей о сервере, и я могу только догадываться, но похоже, что это проблема не сервера, а вашего роутинга. Можно сделать как-то так $url = rtrim($url,"/");
Ответ написан
@ShamblerR
RewriteEngine On
RewriteBase /
Options +FollowSymLinks
############################################################################
#### Убираем повторяющиеся слеши (/) в URL                              ####
############################################################################
RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
            #Проверяем, повторяется ли слеш (//) более двух раз.
RewriteRule . %1/%2 [R=301,L]
            #Исключаем все лишние слеши.

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

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

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

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