创build类似于文件夹结构的博客文章链接

我目前正在创build一个博客,我想创build以下forms的个人文章的链接:

http://www.mysite.com/health/2013/08/25/some-random-title ------ ----------------- | | category title 

但是我不知道如何做到这一点。

我find了一些能够给我的URI。

 $uri = $_SERVER["REQUEST_URI"]; 

然后,我会继续提取所需的部分,并针对数据库提出请求。 这似乎是一个非常非常愚蠢的问题,但我不知道如何在谷歌上查看(我试过…),但我到底怎么处理链接呢?

我试图一步一步解释:

用户点击文章标题 – >页面重新加载新的uri – >我应该在哪里处理这个新的uri,以及如何? 如果请求path如下所示:

index.php?title=some-random-article-title

我会做index.php中的读取$ _GET数组,并相应地处理它。 但是,在这个问题开始的时候,我怎么用这个build议的结构呢?

你将需要一些东西:

  1. 设置.htaccess将所有的请求redirect到你的主文件,它将处理所有这些,如:

     <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> 

    以上将redirect不存在的文件和文件夹的所有请求到您的index.php

  2. 现在你想要处理URLpath,所以你可以像上面提到的那样使用PHPvariables$_SERVER['REQUEST_URI']

  3. 从几乎所有的parsing结果来提取你想要的信息,你可以使用函数parse_urlpathinfoexplode ,这样做。

使用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['extension']将返回空,如果它有一个扩展它将返回.html

$path_parts['filename']会返回some-random-title ,如果它有一个扩展名,它会返回some-random-title.html

使用爆炸这样的事情:

 $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] 

基本上,上面的内容会分解URLpath,并用适当的参数在内部redirect到你的文件blog.php,所以使用你的URL样本将redirect到:

 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 

还有其他的function,可能会方便地进入这个例如parse_urlpathinfo就像我刚才提到的,服务器variables等…

这被称为语义url,也被称为段落url。

您可以使用.htaccess命令RewriteURL来做到这RewriteURL

例如:

 RewriteURL ^(.*)$ handler.php?path=$1 

现在handler.php获取/health/2013/08/25/some-random-title handler.php /health/2013/08/25/some-random-title ,这是你的切入点。