在我目前的项目中,我被要求为每个注册用户提供博客功能,这意味着当您注册时,您可以自动在网站上写博客。这很容易完成,但是,我被指示使用http://username.site.com
格式的URL,使用用户名引用特定用户博客。
我试图用.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
上,因此博客网址应如username.dev.example.com
,当网站启动时,这当然是username.example.com
。它是用Codeigniter构建的。
关于改进.htaccess的任何建议都会很棒,谢谢。
答案 0 :(得分:0)
执行此操作的最佳方法是不使用.htaccess。
这就是我要做的事情:
编辑:
创建通配符DNS记录,假设创建一个CNAME * .example.com&gt; www.example.com 这样,当我转到kyle.example.com时,它真正加载www.example.com。
创建博客模型:
// controller
session-&gt; userdata('blog_id')){//博客ID未保存的会话 $这 - &GT;负载&GT;模型( 'blog_model'); //加载博客模型 $ url = str_replace('。example.com','',strtolower($ _ SERVER ['HTTP_HOST'])); //获取当前主机名,例如kyle.example.com if($ url!=='www'){ if($ blog_info = $ this-&gt; blog_model-&gt; checkForValidBlog()){ //加载你的博客 redirect('/ blog /'。$ blog_info ['blog_id']。'/'); } else { show_error('错误 - 未找到博客',404); } } } else { //加载你的博客 redirect('/ blog /'。$ blog_info ['blog_id']。'/'); } } } ?&GT;