2010-07-15 107 views
0

如果我有一个网址是http://www.example.com/sites/dir/index.html,我想提取单词“网站”。我知道我必须使用正则表达式,但由于某种原因,我对它们的知识不适用于PHP。如何从URL中获取当前网页目录?

我试图使用方法:

$URL = $_SERVER["REQUEST_URI"]; 
preg_match("%^/(.*)/%", $URL, $matches); 

但我必须做一些错误的。我也希望它有一个捕捉功能,如果它在主网站www.example.com,那么它会做“MAIN”字样

编辑:对不起,我已经知道dirname ...它提供完整的目录路径。我只想要第一个目录....所以如果它的www.example.com/1/2/3/4/5/index.html那么它只返回1,而不是/ 1/2/3/4/5/

回答

2

使用dirname功能是这样的:

$dir = dirname($_SERVER['PHP_SELF']); 
$dirs = explode('/', $dir); 
echo $dirs[0]; // get first dir 
+0

末尾加上斜杠请看我的编辑。 – ParoX 2010-07-15 20:56:46

+0

@布赖恩:请看我更新的答案。 – Sarfraz 2010-07-15 21:02:28

+1

请注意,尽管答案要求从URL获取路径,但答复是从文件系统中提供路径,因此虽然在这种情况下两者是相同的,但实际上这是错误的。如果您的url(http:// www.example.com/sites/dir/index.html)由另一个文件夹(ModRewrite)中的脚本处理,比如'/ www/home/scripts/wholesite.php',这个答案将返回“家”而不是“网站”。 PHP_SELF“是脚本”,而REQUEST_URI“是网址”。 – FrancescoMM 2017-03-17 08:22:05

1

的目录名功能应该给你什么,你需要

http://us3.php.net/manual/en/function.dirname.php

<?php 
    $URL = dirname($_SERVER["REQUEST_URI"]); 
?> 
+1

提到mod_rewrite的问题,如果请求的是一个目录,并通过默认的文件服务(通常的index.php) – George 2014-05-29 11:21:37

+0

如果ISN不工作不工作在URL – Nate 2015-10-13 15:12:50

1

使用parse_url$_SERVER['REQUEST_URI']和获取路径n您可以用explode获取路径段:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); 
$segments = explode('/', substr($_SERVER['REQUEST_URI_PATH'], 1)); 

echo $segments[1]; 
0

只是想建议额外检查一个前缀“/”或“\” 和使用DIRECTORY_SEPARATOR:

$testPath = dirname(__FILE__); 
$_testPath = (substr($testPath,0,1)==DIRECTORY_SEPARATOR) ? substr($testPath,1):$testPath; 
$firstDirectory = reset(explode(DIRECTORY_SEPARATOR, dirname($_testPath))); 
echo $firstDirectory; 
0

一种简单可靠的方法是:

$currentWebDir = substr(__DIR__, strlen($_SERVER['DOCUMENT_ROOT'])); 

如果你担心DIRECTORY_SEPARATORS,你也可以这样做:

$currentWebDir = str_replace('\\', '/', substr(__DIR__, strlen($_SERVER['DOCUMENT_ROOT']))); 

另外要注意的由FrancescoMM