我有一个方法,它看起来像这样:
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;
}
如果用户未输入文件名,则返回的网址符合预期,http://localhost/zenbb2
。但是,如果用户这样做,则返回的URL在某种程度上是错误的,无论我尝试执行什么排列。例如,此代码在访问http://localhost
时返回http://localhost/zenbb2/index.php
,但在访问该网址时返回http://localhost/zenbb2
。
编辑 .htaccess文件的内容为:
Options -indexes
RewriteEngine on
此外,我的意思是当前的网址,如果我正在访问http://localhost/zenbb2/index.php
,它会修剪网址中的index.php
,以便我可以在我的代码中的不同位置使用它。理想情况下,最后,我可以像这样使用它:
$url = 'http://localhost/zenbb2';
echo "<link rel=\"{$url}/sample.css\" />"; // http://localhost/zenbb2/sample.css
答案 0 :(得分:0)
您可以使用dirname
来实现此目标:
$ php -a
> $url = 'http://localhost/zenbb2/index.php';
> echo dirname($url);
http://localhost/zenbb2
编辑:
dirname
始终删除字符串的最后一部分,因此请小心谨慎,以确保不会剥离太多,但在遍历URL或目录路径时它会很有用。
答案 1 :(得分:0)
更好的解决方案是创建一个php文件config.php
,然后在其中指定常量,之后,每次要使用该URL时都包含该文件。此解决方案也在众所周知的框架中实现,例如Codeigniter。
这种方法更好,坦率地说,更稳定。例如,如果您在子目录(/zenbb2/sub/file.php
)中有一个php文件,则URL目录将是zenbb2/sub
,这显然不是您要查找的内容,而是您的静态文件将返回404,因为它们不存在。
答案 2 :(得分:0)
试试这个
$url = $_SERVER['REQUEST_URI'];
echo basename($url);
这应该来自index.php
http://localhost/zenbb2/index.php