创建虚荣URL

时间:2011-02-03 03:31:49

标签: php url architecture

我目前正在运行一个网站,我想让人们可以制作自己的网址。例如,这是我的网址: http://www.hikingsanfrancisco.com/hiker_community/hiker_public_profile.php?community_member_id=2

你知道,它只是被id命名,这是无趣的,也对SEO不好(这不重要)。

理想情况下,我希望我的网站成员也在URL中使用他们的名字。这通常是怎么做的?所以在我的情况下,它会是这样的: http://www.hikingsanfrancisco.com/alex-genadinik并隐藏了ID。

这可能吗?任何建议将不胜感激!

谢谢, 亚历克斯

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

Code Igniter是一个很棒的MVC框架,提供配置派生路由,可以轻松配置为通过公共控制器发送所有请求,其中内容可以从数据库中动态提取并呈现。

以下是基本路由规则的示例,该规则排除了对用户,学生和课程的请求,但将所有其他请求路由到公共内容控制器。

因此,如果您请求 http://mydomain.com/hiking-and-camping-info ,则会解析该网址,并徒步旅​​行和露营信息将在数据库中查找并删除相关内容。

路由配置:

$route['^(?!lessons|students|users|content).*'] = 'content';

然后内容控制器抓取网址片段并找到匹配的内容并加载它:

class Content extends Controller {

    function __construct() {
        parent::Controller();
        $this->load->model('Content_model', 'content');
    }

    function index() {
        $content_url = $this->uri->segment(1);
        $data['content'] = $this->content->get_content_by_name($content_url);
        $this->load->view('content', $data);
    }
}

答案 2 :(得分:2)

通常,这是通过在具有mod_rewrite(大多数Linux服务器)的服务器上使用htaccess文件来实现的。一个例子可能是:

Options -Indexes
RewriteEngine On
RewriteRule ^([0-9a-zA-Z\-]+)$ $1.php
RewriteRule ^/(alex[\-]genadinik)$ /hiker_community/hiker_public_profile.php?       community_member_name=$1

这意味着您的hiker_public_profile.php脚本需要接受“alex-genadinik”作为$ _GET变量“community_member_name”,然后通过名称而不是ID来查询数据库。

因此,您将获取上述代码,将其保存在名为“.htaccess”的文件中,然后将其上传到您网站的根目录。建议学习正则表达式。