Удалить слеш в конце URL

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
Slash
Администратор
Сообщения: 2031
Поблагодарили: 62 раза

Удалить слеш в конце URL

Сообщение Slash » Чт ноя 05, 2015 7:09 am

Вчера написал код, который проверяет есть ли в конце текущего URL слеш (/) и если есть, удаляет, затем перенаправляет на этот же адрес, но уже без слеша в конце.
Сам код:

Код: Выделить всё

# Удаление слеша в конце URL
if (basename(substr($_SERVER['REQUEST_URI'], -1) == '/'))
{
    $request_url = rtrim($_SERVER['REQUEST_URI'], '/');
   header('Location: http://' . $_SERVER['HTTP_HOST'] . $request_url, true, 301);
   exit;   
}

Если надо удалять слеш только у одно файла, скажем у файла blog.php, то замените условие:

Код: Выделить всё

if (basename(substr($_SERVER['REQUEST_URI'], -1) == '/'))

на:

Код: Выделить всё

if (basename($_SERVER['SCRIPT_FILENAME']) == 'blog.php' and substr($_SERVER['REQUEST_URI'], -1) == '/')

А если требуется обратное - везде слеш удалять, а файл blog.php должен остаться со слешем, то условие будет таким:

Код: Выделить всё

if (basename($_SERVER['SCRIPT_FILENAME']) != 'blog.php' and substr($_SERVER['REQUEST_URI'], -1) == '/')
Реклама
Аватара пользователя
Slash
Администратор
Сообщения: 2031
Поблагодарили: 62 раза

Re: Удалить слеш в конце URL

Сообщение Slash » Пн ноя 23, 2015 9:32 pm

Еще один способ удаления слеша в конце URL, при помощи .htaccess:

Код: Выделить всё

   # Deleting slash
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} ^(.*)/$
    RewriteRule ^(.*)/$ /$1 [R=301,L]
Аватара пользователя
June
Сообщения: 22

Re: Удалить слеш в конце URL

Сообщение June » Пн ноя 23, 2015 10:53 pm

У меня тоже в .htaccess, т.к. используемые движки обычно поддерживают оба вида адресации (и со слешем в конце, и без), хотя код обычно пишу под первый вариант или иногда универсальный.

Код: Выделить всё

<IfModule mod_dir.c>
DirectorySlash Off
</IfModule>

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule (.*)/*$ http://%1/$1 [R=301,L]

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

...

Вернуться в «PHP»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость