我目前在一个博客上工作,我想以以下形式创建指向我的个人文章的链接:
http://www.mysite.com/health/2013/08/25/some-random-title ------ ----------------- | | category title
但是我不知道如何实现这一目标。
我找到了可以给我URI的东西。
$uri = $_SERVER["REQUEST_URI"];
然后,我将继续提取所需的部分并针对数据库进行请求。这似乎是一个非常非常愚蠢的问题,但是我不知道如何在Google上查找该问题(我尝试过…),但是我将如何处理该链接呢?
我尝试逐步解释它:
用户单击文章标题->页面将重新加载新的uri->我应该在哪里处理这个新的uri?如何处理?如果请求路径如下所示:
index.php?title=some-random-article-title
我会在index.php中做到这一点,并读取$ _GET数组并进行相应处理。但是,在问题开始时,如何使用建议的结构来实现?
您将需要一些注意事项:
<IfModule mod_rewrite.c>
RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
上面的命令会将所有不存在的文件和文件夹的请求重定向到您的 index.php
index.php
现在,您要处理URL路径,以便可以使用 $_SERVER['REQUEST_URI'] 您提到的PHP变量。
$_SERVER['REQUEST_URI']
从那里几乎可以解析它的结果来提取所需的信息,您可以使用函数之一parse_url或pathinfo或explode来完成。
parse_url
pathinfo
explode
使用parse_url哪种可能是执行此操作最明显的方法:
$s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "https" : "http"; $url = $s . '://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; var_dump(parse_url($url));
输出:
["scheme"] => string(4) "http" ["host"] => string(10) "domain.com" ["path"] => string(36) "/health/2013/08/25/some-random-title" ["query"] => string(17) "with=query-string"
因此,您parse_url可以轻松地分解当前的URL。
例如使用pathinfo:
$path_parts = pathinfo($_SERVER['REQUEST_URI']);
$path_parts['dirname'] 会回来 /health/2013/08/25/
$path_parts['dirname']
/health/2013/08/25/
$path_parts['basename']将返回some-random-title,如果有扩展名将返回some-random- title.html
$path_parts['basename']
some-random-title
some-random- title.html
$path_parts['extension'] 将返回空,如果有扩展名,它将返回 .html
$path_parts['extension']
.html
$path_parts['filename']将返回some-random-title,如果有扩展名将返回some-random- title.html
$path_parts['filename']
使用爆炸是这样的:
$parts = explode('/', $path); foreach ($parts as $part) echo $part, "\n";
health 2013 08 25 some-random-title.php
当然,这些只是您如何阅读的示例。
您还可以使用.htaccess制定特定规则,而不是处理一个文件中的所有内容,例如:
RewriteRule ^([^/]+)/([0-9]+)/([0-9]+)/([0-9]+)/([^/]+)/?$ blog.php?category=$1&date=$2-$3-$4&title=$5 [L]
基本上,以上内容将分解URL路径,并使用适当的参数在内部将其重定向到您的文件blog.php,因此使用您的URL示例将其重定向到:
http://www.mysite.com/blog.php?category=health&date=2013-08-25&title=some-random-title
但是,在客户端浏览器上,URL将保持不变:
http://www.mysite.com/health/2013/08/25/some-random-title
例如 parse_url ,还有其他一些功能可能会派上用场, pathinfo 例如我前面提到的服务器变量等。