как удалить множественные слэши в 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