如何使用'PREG'或'HTACCESS'删除URI中的多个斜杠

时间:2011-06-14 04:41:48

标签: php .htaccess preg-replace preg-match preg-split

如何使用'PREG'或'HTACCESS'

删除URI中的多个斜杠

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


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

感谢

5 个答案:

答案 0 :(得分:18)

$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

答案 1 :(得分:13)

在正则表达式中使用加号+表示出现一个或多个前一个字符。所以我们可以在preg_replace中添加它来替换一个或多个/只出现一个

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

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

// now it should be replace with the correct single forward slash
echo $newUrl

答案 2 :(得分:0)

编辑:哈,我把这个问题读成“没有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///');

答案 3 :(得分:0)

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)

答案 4 :(得分:0)

简单,请查看此示例:

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

输出:

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