如何使用“PREG”或“HTACCESS”从URI中删除多个斜杠
site.com/edition/new/// -> site.com/edition/new/
site.com/edition///new/ -> site.com/edition/new/
谢谢
如何使用“PREG”或“HTACCESS”从URI中删除多个斜杠
site.com/edition/new/// -> site.com/edition/new/
site.com/edition///new/ -> site.com/edition/new/
谢谢
$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
在正则表达式中使用加号符号+
表示前一个字符的出现一次或多次。因此,我们可以将它添加到preg_replace中,通过一个替换将一个或多个/
的出现替换为一个
$url = "site.com/edition/new///";
$newUrl = preg_replace('/(\/+)/','/',$url);
// now it should be replace with the correct single forward slash
echo $newUrl
http://
将变成只有一个斜杠的 http:/
。 - Aram Hovhannisyan$url ="http://portal.lojav1.local//Settings////messages";
echo str_replace(':/','://', trim(preg_replace('/\/+/', '/', $url), '/'));
http://portal.lojav1.local/Settings/messages
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/
的翻译是:{{链接1:http://domain.com//test//test//}} > {{链接2: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)
编辑:哈哈,我把这个问题看成“不用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///');
([^:])(\/{2,})
作为正则表达式粘贴,然后将$url作为测试字符串或任何其他要测试的URL粘贴。 - briankip