0

在我目前的项目中,我被要求为每个注册用户提供博客功能,这意味着当你注册时,你可以自动在网站上写博客。这很容易完成,但是,我被指示使用格式的 URL,例如http://username.site.com将用户名引用到特定用户博客。

我正在尝试使用 .htaccess 文件来实现这一点,但似乎我的条件得到了满足,但我收到了 500 内部服务器错误,这是由无限循环的重写引起的。我想避免这种情况,但我找不到合适的解决方案。到目前为止,这是我的 .htaccess:

<IfModule mod_rewrite.c>

   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteBase /

   RewriteCond $1 !^(index\.php|images|tinymce|files|css|js|robots\.txt)
   RewriteRule ^(.*)$ /index.php/$1 [L]

   RewriteCond %{HTTP_HOST} !^www. [NC]
   RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-_]+).dev.example.com [NC]
   RewriteRule ^(.*)$ /index.php/blog/%2/$1 [L]

</IfModule>

附加信息:该站点是服务器托管的,但被隐藏,dev.example.com因此博客 URL 应该看起来像username.dev.example.com,当站点启动时,这当然是username.example.com。它是用 Codeigniter 构建的。

任何有关改进 .htaccess 的建议都会很棒,谢谢。

4

1 回答 1

0

最好的方法是不使用 .htaccess。

这就是我要做的:

  1. 创建通配符 DNS 记录 *.example.com
  2. 创建一个博客模式,选择 $_SERVER['HTTP_HOST'],将其分解并删除您的域。在您的数据库表中进行查找。

编辑:

  1. 创建一个通配符 DNS 记录,假设创建一个 CNAME *.example.com > www.example.com 这样,当我转到 kyle.example.com 时,它真正加载了 www.example.com。

  2. 创建博客模型:

row_count() > 0) { $blogInfo = [ 'blog_id'=>123, // 来自 db 'blog_name'=>'Kyles Test Blog', ... ]; $this->session->set_userdata($blogInfo); 返回 $blogInfo; } 否则 { 返回假;} } } ?>

// 控制器

session->userdata('blog_id')) { // blog id 没有保存 session $this->load->model('blog_model'); // 加载博客模型 $url = str_replace('.example.com', '', strtolower($_SERVER['HTTP_HOST'])); // 获取当前主机名,例如 kyle.example.com if($url !== 'www') { if($blog_info = $this->blog_model->checkForValidBlog()) { // 加载你的博客 redirect(' /blog/' . $blog_info['blog_id'] . '/'); } else { show_error('错误 - 找不到博客', 404); } } } else { // 加载你的博客 redirect('/blog/' . $blog_info['blog_id'] . '/'); } } } ?>
于 2013-03-01T16:45:21.447 回答