我的问题可能很愚蠢,但我不知道该怎么做。我正在使用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会在谷歌上找到它,但我不知道要搜索什么。
谢谢大家。
答案 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”而不是“本地主机”