创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议的结构呢?
你将需要一些东西:
-
设置.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
-
现在你想要处理URLpath,所以你可以像上面提到的那样使用PHPvariables
$_SERVER['REQUEST_URI']
。 -
从几乎所有的parsing结果来提取你想要的信息,你可以使用函数
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['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_url
, pathinfo
就像我刚才提到的,服务器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
,这是你的切入点。