2011-02-03 113 views
2

我目前运行一个网站,我想让人们能够制作自己的网址。例如,这里是我的网址: http://www.hikingsanfrancisco.com/hiker_community/hiker_public_profile.php?community_member_id=2创建虚荣URL

你会发现,它仅仅是由id命名的,这对于SEO来说并不感兴趣,对于SEO来说也不好。

理想情况下,我希望我的网站成员在URL中也有他们的名字。这通常是如何完成的?所以在我的情况下,它会是这样的: http://www.hikingsanfrancisco.com/alex-genadinik并且隐藏了id。

这可能吗?任何意见,将不胜感激!

谢谢, 亚历克斯

回答

3
+0

我认为在那个线程中,它们使事情过度复杂化。如果您可以将虚荣URL作为该实体的其中一个字段放入数据库中,该怎么办?无论如何,你将会从db中获取东西,所以不妨取回虚度URL并在那里重定向。你怎么看? – Genadinik 2011-02-03 16:50:00

+0

有很多方法来剥皮猫 - 从数据库中获取东西并返回虚荣URL它是基本的路由器,框架变得复杂,你只需要知道它们是如何工作和使用全部或部分完成工作 - 你的工作 – bensiu 2011-02-03 17:25:07

2

Code Igniter是一个伟大的MVC框架,它提供了配置的衍生路由,可以很容易地被配置为通过一个共同的控制器,其中内容发送所有请求可以动态地从数据库中拉出并渲染。

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

所以,如果你要求http://mydomain.com/hiking-and-camping-info,该URL将被解析,并远足和露营,信息会在数据库中抬起头来,相关内容被撤下。

路由配置:

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

和内容控制器然后抓起URL段和查找匹配的内容并将其装入:

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

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

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脚本需要接受“亚历克斯 - genadinik”作为$ _GET变量“community_member_name”,然后通过名称来查询数据库,而不是ID的。

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