PHP - url路径作为参数

时间:2015-06-16 17:01:59

标签: php url parameters

我的问题可能很愚蠢,但我不知道该怎么做。我正在使用PHP来创建网站。为了改变页面的内容,存在包括基于url参数的不同文件的脚本,例如。 http://example.com/index.php?page=news这会加载一些新闻页面。当我想加载一些确切的文章时,我添加了另一个这样的参数。 http://example.com/index.php?page=news&id=18964无论如何,它看起来并不好看。我希望我的网址与他们在本网站http://stackoverflow.com/questions/ask一样 或者在我的情况下http://example.com/news/18964

A会在谷歌上找到它,但我不知道要搜索什么。

谢谢大家。

2 个答案:

答案 0 :(得分:3)

这里有一个mod_rewrite的完整指南看起来很不错。你必须向下滚动一下才能获得url作为参数。

https://www.branded3.com/blog/htaccess-mod_rewrite-ultimate-guide/

如果你不想用mod_rewrite搞得太多,并且已经通过一个单独的公共index.php进行了所有操作(无论如何这是一个好主意)。那么你可以做一些像这样更脏的东西。

/**
 * Get the given variable from $_REQUEST or from the url
 * @param string $variableName
 * @param mixed $default
 * @return mixed|null
 */
function getParam($variableName, $default = null) {

    // Was the variable actually part of the request
    if(array_key_exists($variableName, $_REQUEST))
        return $_REQUEST[$variableName];

    // Was the variable part of the url
    $urlParts = explode('/', preg_replace('/\?.+/', '', $_SERVER['REQUEST_URI']));
    $position = array_search($variableName, $urlParts);
    if($position !== false && array_key_exists($position+1, $urlParts))
        return $urlParts[$position+1];

    return $default;
}

请注意,这将首先检查具有相同名称的任何_GET,_POST或_HEADER参数。然后它检查给定键的URL的每个部分,并返回以下部分。所以你可以这样做:

// On http://example.com/news/18964
getParam('news');
// returns 18964

答案 1 :(得分:0)

首先将 URL 保存在变量中

$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

然后把它分成两部分

$uri = explode( '/', $uri );

将 id 设置为 int :-

$Id = null;
if (isset($uri[2])) {
    $Id = (int) $uri[2];
}

最重要的是,如果您使用的是 xampp Apache 服务器,它将无法工作。 为此,您必须为该特定文件夹使用 php 运行服务器:-

php -S 127.0.0.1:8080 -t api

这里的“api”是文件夹。

并且在数据库 mysql 连接中使用“127.0.0.1”而不是“本地主机”