как удалить несколько слэшей в URI с помощью «PREG» или «HTACCESS» - PullRequest
8 голосов
/ 14 июня 2011

как удалить несколько слэшей в URI с помощью 'PREG' или 'HTACCESS'

site.com / edition / new /// -> site.com/edition/new/


site.com / edition /// new / -> site.com/edition/new/

спасибо

Ответы [ 5 ]

18 голосов
/ 01 августа 2013
$url = 'http://www.abc.com/def/git//ss';
$url = preg_replace('/([^:])(\/{2,})/', '$1/', $url);
// output http://www.abc.com/def/git/ss

$url = 'https://www.abc.com/def/git//ss';
$url = preg_replace('/([^:])(\/{2,})/', '$1/', $url);
// output https://www.abc.com/def/git/ss
13 голосов
/ 14 июня 2011

с использованием символа плюс + в регулярном выражении означает появление одного или нескольких предыдущих символов. Таким образом, мы можем добавить его в preg_replace, чтобы заменить вхождение одного или нескольких / только одним из них

   $url =  "site.com/edition/new///";

$newUrl = preg_replace('/(\/+)/','/',$url);

// now it should be replace with the correct single forward slash
echo $newUrl
0 голосов
/ 12 июля 2016

Простой, проверьте этот пример:

$url ="http://portal.lojav1.local//Settings////messages";
echo str_replace(':/','://', trim(preg_replace('/\/+/', '/', $url), '/'));

вывод:

http://portal.lojav1.local/Settings/messages
0 голосов
/ 07 марта 2012

http://domain.com/test/test/> http://domain.com/test/test

# Strip trailing slash(es) from uri
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)[/]+$ $1 [NC,R,L]

http://domain.com//test//test//> http://domain.com/test/test/

# Merge multiple slashes in uri
RewriteCond %{THE_REQUEST} ^[A-Z]+\ //*(.+)//+(.*)\ HTTP
RewriteRule ^ /%1/%2 [R,L]
RewriteCond %{THE_REQUEST} ^[A-Z]+\ //+(.*)\ HTTP
RewriteRule ^ /%1 [R,L]

Измените R на R = 301, если после тестирования все работает нормально ...

Кто-нибудь знает, как сохранить двойной слеш в запросе, используя вышеуказанный метод?

(Например: / test // test //? Test = test // test> / test / test /? Test = test // test)

0 голосов
/ 14 июня 2011

Редактировать: Ха, я читаю этот вопрос как "без preg", ну хорошо: 3

function removeabunchofslashes($url){
  $explode = explode('://',$url);
  while(strpos($explode[1],'//'))
    $explode[1] = str_replace('//','/',$explode[1]);
  return implode('://',$explode);
}

echo removeabunchofslashes('http://www.site.com/edition////new///');
...