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

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
Slash
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

Удалить слеш в конце 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
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

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
Зарегистрирован: Вс ноя 08, 2015 1:19 pm

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]

...

Ответить Пред. темаСлед. тема

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

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