2012-11-02 69 views
0

我有一個使用模塊的Zend Framework應用程序設置。例如。我有一個「股票」模塊和一個「交易」模塊。我想爲這些庫有多個子域名,即stock.website.com,transaction.website.com(因此DocumentRoot將是每個子目錄的相同目錄)。問題是,因爲它們是Zend應用程序的「模塊」,我不得不去stock.website.com/stock或transaction.website.com/transaction。帶有子域和zend模塊的Htaccess

我想知道是否有一種方法可以使用rewriteCond規則來識別子域名,然後將所有加載在該頁面上的URL視爲來自stock.website.com/stock,但只有stock.website .com在地址欄中?

目前,我有一個zend應用程序的標準htaccess規則。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

回答

1

我建議你可以使用Zend Route Hostname作爲你的解決方案,因爲Zend會將請求(不是htaccess)路由到基於主機名的特定模塊,所以你強調查詢字符串url將不是問題。

基本上,你可以(僅適用於模塊)添加到您的application.ini象下面這樣:

resources.router.routes.stock.type = "Zend_Controller_Router_Route_Hostname" 
resources.router.routes.stock.route = "stock.yourwebsite.com" 
resources.router.routes.stock.defaults.module = "stock" 

resources.router.routes.transaction.type = "Zend_Controller_Router_Route_Hostname" 
resources.router.routes.transaction.route = "transaction.yourwebsite.com" 
resources.router.routes.transaction.defaults.module = "transaction" 

那麼剩下只是讓Zend的處理。

希望這會幫助你!

+0

@ user2041531A小問題:當我創建子域的哪個文件夾必須是子域文件夾的根目錄時:application/modules/stock?謝謝! – Andreea

0
RewriteCond %{HTTP_HOST} ^(.*)\.website\.com$ [NC] 
RewriteRule ^(.*)$ /%1$1 

的的RewriteCond應符合whatever.website.com 的重寫規則,則URL映射從whatever.website.com/pathwhatever.website.com/whatever/path

此規則集將在您現有的RewriteRules之間移動,您不會使用[L]來終止它,以便index.php規則可以作用於生成的URL。

+0

嗨大衛,謝謝你的回覆!也許我沒有正確地放入我的htaccess文件?我直接在index.php指令之前的'RewriteRule ^。* $ - [NC,L]'行之後。它沒有改變任何東西,但(是的,我把網站重命名爲我的網站名稱)。 – Benno

+0

這是正確的地方,但作爲一個測試,只是爲了確保以前的規則不會產生干擾,請嘗試將兩行放在頂部,緊接着'RewriteEngine On'並修改RewriteRule行以重定向(不是你需要什麼,但是爲了測試它,你可以很容易地在瀏覽器中看到結果URL,以確保規則實際上匹配):'RewriteRule ^(。*)$ /%1 $ 1 [R = 301,L]' (RewriteCond行將保持不變)。此外,通常的警告 - 更改後重新啓動服務器,清除瀏覽器緩存,並禁用mod_cache,如果它確保緩存不是問題。 –

+0

感謝您的回覆,但這似乎仍然不夠奇怪。我認爲它必須與Zend處理模塊路由的方式有關。 user2041531的回答解決了這個問題,謝謝你的幫助,雖然我非常感謝! – Benno