0

我有一个方法,它看起来像这样:

private function setURL()
{
    $pageURL = 'http';

    if(isset($_SERVER["HTTPS"]) && $_SERVER['HTTPS'] == "on")
    {
        $pageURL .= "s";
    }

    $pageURL .= "://";

    if($_SERVER["SERVER_PORT"] != "80")
    {
        $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
    }
    else
    {
        $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    }

    if(substr($pageURL, -4) == ".php")
    {
        // damn. this is harder to recover from.
        $len = strlen(basename(__FILE__, '.php'));
        $len = strlen($pageURL) - $len;
        $pageURL = substr($pageURL, 0, $len);
    }
    if(substr($pageURL, -1) != "/")
    {
        $pageURL .= "/";
    }

    $this->url = $pageURL;
}

如果用户没有输入文件名,则返回的 URL 与预期的一样,http://localhost/zenbb2. 但是,如果用户这样做,则无论我尝试执行何种排列,返回的 URL 在某种程度上都是错误的。例如,此代码http://localhost在访问时返回http://localhost/zenbb2/index.php,但http://localhost/zenbb2在访问该 URL 时返回。

编辑我的 .htaccess 文件的内容是:

Options -indexes

RewriteEngine on

另外,我的意思是当前 URL,如果我正在访问http://localhost/zenbb2/index.php,它会index.php从 URL 中删除,以便我可以在代码中的各个位置使用它。理想情况下,最后,我可以这样使用它:

$url = 'http://localhost/zenbb2';
echo "<link rel=\"{$url}/sample.css\" />"; // http://localhost/zenbb2/sample.css
4

3 回答 3

0

试试这个

$url = $_SERVER['REQUEST_URI'];
echo basename($url);

这应该index.phphttp://localhost/zenbb2/index.php

于 2013-06-09T09:26:15.333 回答
0

您可以使用dirname来实现这一点:

$ php -a
> $url = 'http://localhost/zenbb2/index.php';
> echo dirname($url);
http://localhost/zenbb2

编辑: dirname总是去掉字符串的最后一部分,所以要小心确保不要去掉太多,但在遍历 URL 或目录路径时它会很有用。

于 2013-06-09T09:13:21.690 回答
0

更好的解决方案是创建一个 php 文件config.php,然后在其中指定常量,然后在每次要使用 URL 时包含该文件。该解决方案也在 Codeigniter 等知名框架中实现。

这种方法更好,坦率地说,更稳定。例如,如果您在子目录 ( /zenbb2/sub/file.php) 中有一个 php 文件,则 URL 目录将是zenbb2/sub,这显然不是您要查找的内容,并且您的静态文件将返回 404,因为它们不存在那里。

于 2013-06-09T09:18:09.013 回答