как удалить множественные слэши в URI с помощью «PREG» или «HTACCESS»

как удалить множественные слэши в URI с помощью «PREG» или «HTACCESS»

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


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

благодаря

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

  $url = "site.com/edition/new///"; $newUrl = preg_replace('/(\/+)/','/',$url); // now it should be replace with the correct single forward slash echo $newUrl 
 $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 

Редактирование: Ха, я прочитал этот вопрос как «без прега», хорошо: 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///'); в 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///'); 

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} ^[AZ]+\ //*(.+)//+(.*)\ HTTP RewriteRule ^ /%1/%2 [R,L] RewriteCond %{THE_REQUEST} ^[AZ]+\ //+(.*)\ HTTP RewriteRule ^ /%1 [R,L] 

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

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

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

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

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

вывод :

 http://portal.lojav1.local/Settings/messages