0

URL が次の場合:

もし: http://www.imvu-e.com/products/dnr/
その時: http://www.imvu-e.com/products/dnr/

もし: http://www.imvu-e.com/products/dnr/?
その時: http://www.imvu-e.com/products/dnr/

もし: http://www.imvu-e.com/products/dnr/index.php
その時: http://www.imvu-e.com/products/dnr/

もし: http://www.imvu-e.com/products/dnr/page.php?var=2
その時: http://www.imvu-e.com/products/dnr/

もし: http://www.imvu-e.com/products/dnr
その時: http://www.imvu-e.com/products/

これどうやってするの?

私の試み:

print "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['REQUEST_URI'])."/";
4

4 に答える 4

1

あなたの「試み」の問題は、 $_SERVER['REQUEST_URI'] に index.php や疑問符など、ユーザーが渡したすべてのものが含まれることです。あなたが求めているものを得るためには、以下を解析する必要があります$_SERVER['REQUEST_URI']:

  • 末尾がスラッシュの場合は/そのまま
  • それ以外の場合は、文字列の最後のスラッシュを見つけて、最初からこのスラッシュまでの部分文字列を取得します。
  • 最後に、結果をhttp://(またはhttps://ドメイン名と共に)に追加します。
于 2012-07-24T08:15:40.310 に答える
1

parse_url() 関数を見てください。

必要なものは何でも返します。

parse_url の結果を単に print_r() して、何が返されるかを確認します。おそらく次のようなものが必要です。

$ARRurlParts = parse_url($orgurl);

$newURL = $ARRelem["scheme"].
"://".$ARRelem["host"].
((isset($ARRelem["port"]))?":".$ARRelem["port"]:"").
$ARRelem["path"];
于 2012-07-24T08:16:23.750 に答える
1

これで終わった

$s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
$protocol = substr(strtolower($_SERVER["SERVER_PROTOCOL"]), 0, strpos(strtolower($_SERVER["SERVER_PROTOCOL"]), "/")) . $s;
$port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
$address = $protocol . "://" . $_SERVER['SERVER_NAME'] . $port . $_SERVER['REQUEST_URI'];
$parseUrl = parse_url(trim($address));
$parent = (substr($parseUrl['path'], -1) == '/') ? $parseUrl['path'] : dirname($parseUrl['path']) . "/";
return $parseUrl['scheme'] . '://' . $parseUrl['host'] . $parseUrl['port'] . $parent;

Erwin Moller の回答 (私が投票した理由) と Web 上のスニプレットに部分的に触発されました。

于 2012-07-26T19:00:44.067 に答える
-1

最後のバックスラッシュから文字列の最後まですべてを削除できます。dirname($_SERVER['REQUEST_URI'])私はそれが仕事をしないと確信しています。を使ってみることもできますdirname($_SERVER['SCRIPT_FILENAME'])。派手な .htaccess 書き換えルールがない場合は、最後の方法でうまくいくはずです。

于 2012-07-24T08:15:18.103 に答える