伪静态已经不是一个新鲜的名词了,尤其是在现今SEO的炒作中。如何实现伪静态这是每个程序员都关心的问题,除非您不搞SEO。大多的伪静态都是以Htaccess(Apache mod_rewrite)来实现的,但是一个规划不太好的网站要用Htaccess实现,需要写一大堆的代码,而还有某种原因我们不得不放弃Htaccess,或是由于服务器不支持,或是个人偏好等等。
对于单入口(访问网站必需首先通过某一文件,一般都是index.php来实现其它功能的项目)程序来说:
常见的Url大都为:http://www.phplamp.org/index.php?controller=posts&action=index
说实话这样的URL很难看,最重要的是搜索引擎不认它为正常的URL,这很可怕。如何实现一个好看的且与搜索引擎能攀上亲的URL呢。
看这个URL:http://www.phplamp.org/index.php/posts/index/
很新奇的URL创意,这也是我在使用CakePHP框架的过程中体验出来的,此URL相对于彼URL来说:易记,美观,最主要的是搜索引擎虽不认它为老爸,起码不会把它划为黑名单。
解释一下上面的URL,"posts":一般称其为Controller(控制器),由它来决定加载哪个处理文件;"index":一般称其为Action(操作),由它来决定要进行什么操作。所以/posts/index/顾名思义就是posts的主页了。如果后面需要传递参数可以直接加在Action后面。
如下面这个URL:http://www.phplamp.org/index.php/posts/category/1/。列出posts的分类ID为1下的所有内容。
以下是随手写的一个函数来处理这种情况,写的比较匆忙,没进行太多的测试,如发现问题请与我联系。
1. <?php
2. function uri() {
3. // 获取请求的URI
4. foreach (array("REQUEST_URI", "HTTP_X_REWRITE_URL", "argv") as $var) {
5. if ($uri = $_SERVER[$var]) {
6. if ($var == "argv") {
7. $uri = $uri[0];
8. }
9. break;
10. }
11. }
12.
13. // 去除//情况
14. $uri = str_replace("//", "/", $uri);
15.
16. // 去掉index.php
17. if (strpos($uri, "index.php") !== false) {
18. $uri = explode("index.php", $uri, 2);
19. }
20.
21. // 如果没有请求的字符串返回
22. if (!isset($uri[1])) {
23. return array("controller" => '', "action" => '');
24. }
25.
26. // 分解
27. $uriBak = explode("/", $uri[1]);
28. unset($uri);
29.
30. // 去除空项
31. foreach ($uriBak as $val) {
32. if ($val) {
33. $uri[] = $val;
34. }
35. }
36.
37. list($controller, $action) = $uri;
38.
39. $params = array();
40. if (count($uri) > 2) {
41. array_shift($uri);
42. array_shift($uri);
43. }
44. $params = $uri;
45.
46. return
47. array(
48. "controller" => $controller,
49. "action" => $action,
50. "params" => $params,
51. );
52. }
53.
54. print_r(uri());
55. ?>
来源:http://www.phplamp.org/2009/04/php-url-index-php-htaccess/
对于单入口(访问网站必需首先通过某一文件,一般都是index.php来实现其它功能的项目)程序来说:
常见的Url大都为:http://www.phplamp.org/index.php?controller=posts&action=index
说实话这样的URL很难看,最重要的是搜索引擎不认它为正常的URL,这很可怕。如何实现一个好看的且与搜索引擎能攀上亲的URL呢。
看这个URL:http://www.phplamp.org/index.php/posts/index/
很新奇的URL创意,这也是我在使用CakePHP框架的过程中体验出来的,此URL相对于彼URL来说:易记,美观,最主要的是搜索引擎虽不认它为老爸,起码不会把它划为黑名单。
解释一下上面的URL,"posts":一般称其为Controller(控制器),由它来决定加载哪个处理文件;"index":一般称其为Action(操作),由它来决定要进行什么操作。所以/posts/index/顾名思义就是posts的主页了。如果后面需要传递参数可以直接加在Action后面。
如下面这个URL:http://www.phplamp.org/index.php/posts/category/1/。列出posts的分类ID为1下的所有内容。
以下是随手写的一个函数来处理这种情况,写的比较匆忙,没进行太多的测试,如发现问题请与我联系。
1. <?php
2. function uri() {
3. // 获取请求的URI
4. foreach (array("REQUEST_URI", "HTTP_X_REWRITE_URL", "argv") as $var) {
5. if ($uri = $_SERVER[$var]) {
6. if ($var == "argv") {
7. $uri = $uri[0];
8. }
9. break;
10. }
11. }
12.
13. // 去除//情况
14. $uri = str_replace("//", "/", $uri);
15.
16. // 去掉index.php
17. if (strpos($uri, "index.php") !== false) {
18. $uri = explode("index.php", $uri, 2);
19. }
20.
21. // 如果没有请求的字符串返回
22. if (!isset($uri[1])) {
23. return array("controller" => '', "action" => '');
24. }
25.
26. // 分解
27. $uriBak = explode("/", $uri[1]);
28. unset($uri);
29.
30. // 去除空项
31. foreach ($uriBak as $val) {
32. if ($val) {
33. $uri[] = $val;
34. }
35. }
36.
37. list($controller, $action) = $uri;
38.
39. $params = array();
40. if (count($uri) > 2) {
41. array_shift($uri);
42. array_shift($uri);
43. }
44. $params = $uri;
45.
46. return
47. array(
48. "controller" => $controller,
49. "action" => $action,
50. "params" => $params,
51. );
52. }
53.
54. print_r(uri());
55. ?>
来源:http://www.phplamp.org/2009/04/php-url-index-php-htaccess/
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2836/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2010-3-18 17:17
评论列表