9

「PREG」または「HTACCESS」を使用して URI の複数のスラッシュを削除する方法

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


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

ありがとう

4

5 に答える 5

16

正規表現でプラス記号を使用すると+、前の文字が 1 つ以上出現することを意味します。したがって、それを preg_replace に追加して、1 つまたは複数の出現をそのうちの 1 つ/ だけに置き換えることができます。

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

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

// now it should be replace with the correct single forward slash
echo $newUrl
于 2011-06-14T05:07:29.493 に答える
1

簡単です、この例をチェックしてください:

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

出力:

http://portal.lojav1.local/Settings/messages
于 2016-07-12T17:58:20.410 に答える
0

編集:ハ私はこの質問を「プレグなし」と読みました: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///');
于 2011-06-14T05:06:03.630 に答える
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)

于 2012-03-07T13:22:05.833 に答える