如何使用php为我的网站编写动态URL?

时间:2015-02-03 19:01:59

标签: php apache .htaccess url-rewriting

在我的网络服务器文档根目录中,我创建了文件夹/user/,其中包含/index.php脚本。无论当前(授权)用户如何,我都需要创建一个页面,向任何人显示有关任何人任何用户的信息,我有一个想法是使用查询字符串:< / p>

site.com/user/?id=3

但我不想这样做。我想要像GitHub这样的网址:

site.com/user/UserName/

另外,我需要允许网址连续指定请求的“操作”,例如subscribecomments,以及指定用户名的参数:

site.com/user/Admin/comments/32
site.com/user/Admin/virtual/path/

应该是对物理路径的简单重写:`/user/index.php'。

我是PHP的新手,但我知道mod_rewrite和.htaccess的基础知识,我仍然不明白如何确定哪个用户(Admin)和什么操作(comments)是URL请求,在我的PHP脚本index.php中。

请教我如何为我的网站获取此网址语法?或者更好的是,如何将/user/Admin/comments重定向到实际/user/comments.php ..

  1. 如何通过保存php脚本的用户名/操作来设置这种动态重写?
  2. 脚本如何访问URL请求的用户名和操作(comments32
  3. 我应该如何重命名我的问题,因为这个标题似乎不正确。
  4. 对于长文本感到抱歉,我是干净的PHP脚本新手,谢谢!

3 个答案:

答案 0 :(得分:2)

如果 我理解不是每个人都需要或想要使用框架。

首先让我们说你的用户网址就像Github一样。

http://www.yoursite.com/user/dmitrij 

然后,为了你的.htaccess,你需要一个像这样的重写规则。

    RewriteEngine On
    # check to make sure the request is not for a real file
    RewriteCond %{REQUEST_FILENAME} !-f
    # check to make sure the request is not for a real directory
    RewriteCond %{REQUEST_FILENAME} !-d
    #route request to index.php
    RewriteRule ^user/([^/]+)/? /user/index.php?id=$1 [L]

然后,如果您想显示评论,您的网址可能如下所示

http://www.yoursite.com/user/dmitrij/comments/32

然后你可以使用.htaccess

    RewriteEngine On
    # check to make sure the request is not for a real file
    RewriteCond %{REQUEST_FILENAME} !-f
    # check to make sure the request is not for a real directory
    RewriteCond %{REQUEST_FILENAME} !-d
    #route request to index.php
    RewriteRule ^user/([^/]+)/comments/([0-9]+)/? /user/index.php?id=$1&comment_id=$2 [L]

然后你可以将它们全部放在.htaccess文件中以获取两个URL。

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^user/([^/]+)/comments/([0-9]+)/? /user/index.php?id=$1&comment_id=$2 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^user/([^/]+)/? /user/index.php?id=$1 [L]

然后在index.php中,您将检查$_GET请求。 这是一个非常简单的例子。

<?php

 $username = $_GET["id"];
 $com_id = $_GET["comment_id"];

 print_r($username);
 exit;

?>

确保在服务器上启用了mod_rewrite,并在vhost或配置文件中设置了AllowOverride All

您可以使用$_GET中的值执行任何操作。您必须确保username在您的数据库中是唯一的。你也可以为不同的URL添加更多的重写,我在这里不会介绍。 这应该会给你一个良好的开端。

答案 1 :(得分:1)

使用URL-Rewrite-Engine或使用 MVC框架开始编程,例如symfonycakePHP,其中包含功能

答案 2 :(得分:1)

与上面的答案一样 - 您需要启用mod_rewrite,然后在.htaccess文件中提供映射模式。

我相信您还必须确保将虚拟主机配置为

`Allow Override ALL`

此页面提供了很好的详细信息 - 向下滚动到标题为&#34;如何重写网址&#34;的部分。

http://www.smashingmagazine.com/2011/11/02/introduction-to-url-rewriting/