在PHP / HTACCESS中读取URL

时间:2017-01-08 21:57:29

标签: php wordpress .htaccess

我想创建一个系统,读取用户提供的URL,然后将其切片到数组,这样就可以从结果中输出不同的页面。

让我为此

创建一个示例伪代码
//Url in borwser is http://example.com/user/frank
//this is index.php file in examplepage.com
//folders user and user/frank do not exist

$url = read_url();
//$url[0] = 'example.com';
//$url[1] = 'user';
//$url[2] = 'frank';

if($url[1]=='user' && $url[2]=='frank'){
    include_frank_page():
}else if($url[1]=='user' && $url[2]=='john'){
    include_john_page():
}else{
    include_user_error_page():
}

我怎么能做这样的事情?我知道WordPress会做这样的事情,但我找不到代码的一部分。这是否与它创建的.htacces文件有关?

如果您要向我提供任何描述或教程的链接,我将非常感谢。

修改 好的,FallbackResource /index.php正是我所需要的,但是存在502代理错误。

我的.htacces看起来像这样:

FallbackResource /test/index.php

index.php

中的test
echo $_SERVER['REQUEST_URI'];

这两个都在我的example.com根目录中的'test'文件夹中。出于显而易见的原因,我只想在此文件夹中执行此操作。

当我输入example.com/test/aaa结果为'/ test / aaa'时 - 确定。

当我输入example.com/test/aaa/bbb结果为'/ test / aaa / bbb'时 - 确定。

当我输入example.com/test/时,会出现“502代理错误”。我怎么能避免这种情况?

编辑2: 此外,当我在test2文件夹中创建文件夹test并输入example.com/test/test2时 - 还有502代理错误。

1 个答案:

答案 0 :(得分:1)

您可以在.htaccess中实现一个“前端控制器”,将所有请求路由到单个文件,例如。 index.php。 (这就是WordPress的作用)。

然后,在index.php中,您检查网址并加载相应的内容。

例如,在.htaccess

FallbackResource /index.php

这将通过文档根目录中的index.php路由对不存在的文件的所有请求。 (WordPress使用mod_rewrite实现。)

然后,在index.php中,您可以执行以下操作:

// Actual HTML pages stored in a (hidden) subdirectory called "/pages"
$pageDir = $_SERVER['DOCUMENT_ROOT'].'/pages';
$pages = array (
    '/home' => 'home.php',
    '/about' => 'about.php',
    '/contact => 'contact.php',
);

// $_SERVER['REQUEST_URI'] contains the URL of the request
$url = $_SERVER['REQUEST_URI'];
if (isset($pages[$url])) {
    include($pageDir.'/'.$pages[$url]);
} else {
    // NB: The "error-404.php" page will need to return the appropriate HTTP status
    include($pageDir.'/error-404.php');
}