2012-03-07 48 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