如何将域名后的所有内容都变成字符串

时间:2012-01-08 04:24:44

标签: php mod-rewrite

我的目标是将域名后的所有内容都变成字符串。如在mysite.com/page/page2中将导致字符串“page / page2”。我可以做,但它开始给我带来问题,例如,当网站在子文件夹而不是根目录,那么网站所在的文件夹也将包含在字符串中,如果我没有使用mod_rewrite获得漂亮的链接,它还会将index.php添加到字符串中。

所以,我需要一两个技巧来让脚本了解该网站是否在mysite.com/sitefolder/page/page2等子文件夹中,并且它仍然会产生一个字符串

page/page2

如果该网站没有使用mod_rewrite且该网址为mysite.com/sitefolder/index.php/page/page2,则仍会产生字符串

page/page2

请记住,我在配置文件中定义了URL和USE_MOD_REWRITE,因此不需要魔术。我只是不知道如何获得该字符串。我知道我可以用$ _SERVER ['REQUEST_URI']来获取字符串,但是index.php仍然会在其中。如果我的解释不够好,我很抱歉,但感谢所有的帮助。

2 个答案:

答案 0 :(得分:10)

  • 通过解析请求uri获取路径
  • 从字符串末尾删除最终的脚本名称(例如index.php)
  • rtrim任何尾部斜杠

    $request = parse_url($_SERVER['REQUEST_URI']);
    $path = $request["path"];
    $result = rtrim(str_replace(basename($_SERVER['SCRIPT_NAME']), '', $path), '/');
    

修改

$request = parse_url($_SERVER['REQUEST_URI']);
$path = $request["path"];

$result = trim(str_replace(basename($_SERVER['SCRIPT_NAME']), '', $path), '/');

$result = explode('/', $result);
$max_level = 2;
while ($max_level < count($result)) {
    unset($result[0]);
}
$result = '/'.implode('/', $result);

答案 1 :(得分:2)

您可以使用$SERVER['REQUEST_URI']然后使用PHP的substr()函数修改字符串。因此,将URI放入变量中,然后运行该函数以从头开始删除前X个字符(域名长度),从末尾删除X个字符(index.php = 9)。

例如:

$new_url = substr($uri_variable, 10, -9);

$uri_variable$SERVER[ REQUEST_URI']`,10是域名后面的字符,-9是index.php中的字符。

http://php.net/manual/en/function.substr.php