2012-03-07 94 views
0

现在我正在codeigniter中开发一个webshop项目。 最后会有多个关于子域名的网上商店,以及主域名的首页。CodeIgniter中的mod_rewrite,subdomains和htaccess

它应该是动态的,以便网上商店获得他们自己的子域名。 店铺信息在数据库中。可以说,我有一个MySQL表包含这样的信息:

  • 网上商店:鲍勃店
  • webshop_subdomain:bobsshop

等。

现在在.htaccess文件中,我想制定一个重写规则,以便bobsshop.mydomain.com将被重写为mydomain.com/bobsshop/,因为我正在使用控制器在Codeigniter中工作。

你应该记住,在index.php也已经被改写了,有也应该是让子页面像bobsshop.mydomain.com/contact/

我将让PHP脚本的可能性,这将检查在数据库中存在的子域,如果它不存在,那么访问者就会看到一个404

我的DNS设置是这样ATM:

  • mydomain.com xxx.xxx.xxx .xxx
  • * .mydomain.com xxx.xxx.xxx.xxx

其中xxx.xxx.xxx.xxx是我的服务器IP。

我真的从来没有用过htaccess/mod_rewrite之前。 可以这样做吗?有没有人可以帮助我做到这一点?

对不起,我的英文。我希望你明白我想要做什么。

在此先感谢

回答

0
RewriteEngine on 
RewriteCond $1 !^(index\.php|resources|robots\.txt) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{HTTP_HOST} ^((?!www\.)(?!mydomain\.com)[^\.]+)\. 
RewriteRule ^(.*)$ http://www.mydomain.com/index.php?/%1/$1 [L] 

输入网址 - http://adasd.mydomain.com/test

1 RewriteCond %{HTTP_HOST} ^((?!www\.)(?!mydomain\.com)[^\.]+)\. 

    This condition was met 

2 RewriteRule ^(.*)$ http://www.mydomain.com/index.php?/%1/$1 [L] 

    This rule was met, the new url is http://www.mydomain.com/index.php?/adasd/test 
    The tests are stopped, using a different host will cause a redirect 

输出URL - http://www.mydomain.com/index.php?/adasd/test

然后,您可以

    从URL中删除index.php文件
  1. 从系统/应用/ config目录下打开config.php文件,并与$config['index_page'] = ""
  2. 实现上述.htaccess文件

在某些情况下uri_protocol默认设置无法正常工作,更换 $config['index_page'] = "index.php"。要解决这个问题,只需将$config['uri_protocol'] = "AUTO"替换为system/application/config/config.php中的$config['uri_protocol'] = "REQUEST_URI"即可。

+0

似乎并不奏效。 当你进入子域时,它会成为一个商店。 像a-shop.mydomain.com一样。 现在不起作用。 如果我输入a-shop.mydomain.com,它会显示主页,它显示在mydomain.com上。 也许我应该提一下,a-shop是codeigniter中的一个动态控制器。 我的虚拟主机文件怎么样?我应该做些什么吗?那么DNS呢?这是正确的吗? – 2012-03-07 21:57:01

+0

它仍然不起作用。 :/ – 2012-03-11 12:57:43

+0

当你说动态控制器是什么意思?上述.htaccess会将请求从a-shop.mydomain.com/foo/bar发送到mydomain.com/a-shop/foo/bar,这意味着a-shop是控制器,foo是方法,bar是参数1。你不需要触摸你的虚拟主机或DNS设置,他们看起来很好。 – 2012-03-12 15:37:28