2011-03-03 41 views
4

UPD: 已解決。問題是因爲我們使用nginx作爲前端。所以nginx不會將HTTP_HOST傳遞給apache。Zend Framework:從路由獲取子域參數


你好!

我在生產服務器上的本地控制器上獲取子域參數時出現問題,而本地主機沒問題。來自URL的其他參數,如控制器,操作返回,因爲他們應該。

返回null生產:

$agencyName = (string) $this->_getParam('agency'); 

作出的.htaccess沒有變化:

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

這是我的虛擬主機設置:

<VirtualHost *:8080> 
     ServerName agencies.domain.com 
     ServerAlias *.agencies.domain.com 

     ErrorLog /var/log/apache2/agencies.domain_errors.log 

     DocumentRoot /var/www/agencies.domain.com/public/ 

     <Directory "/var/www/agencies.domain.com/public"> 
       Options -Indexes FollowSymLinks Includes 
       DirectoryIndex index.shtml index.php 
       AllowOverride All 
       # Controls who can get stuff from this server. 
       Order allow,deny 
       Allow from all 
     </Directory> 
</VirtualHost> 

有誰知道爲什麼一切發生的時候?

UPD:在引導

public function run() 
    { 
     $frontController = Zend_Controller_Front::getInstance(); 
     $router = $frontController->getRouter(); 

     $plainPathRoute = new Zend_Controller_Router_Route(
         ':module/:controller/:action/*', 
         array(
          'module' => 'default', 
          'controller' => 'index', 
          'action' => 'index', 
         ) 
     ); 

     $config = $this->getOptions(); 

     $hostnameRoute = new Zend_Controller_Router_Route_Hostname(
         ':agency.' . $config['siteUri'], 
         NULL, 
         array(
          'agency' => '([a-z0-9]+)' 
         ) 
     ); 

     $router->addRoute('subdomain', $hostnameRoute->chain($plainPathRoute)); 

     parent::run(); 
    } 

路由器,是的,我有$配置[ 'siteUri']定義的,我也嘗試使用:agency.domain.com再次得到了同樣的問題

+0

好像我們需要檢查您正在使用的路線。 – 2011-03-03 14:17:06

+0

請創建答案,而不是回答答案中的問題。詳細一點。 – markus 2011-03-04 08:34:54

回答

1

已解決。問題是因爲我們使用nginx作爲前端。所以nginx不會將HTTP_HOST傳遞給apache。

4

使用以下命令:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initRoute() 
    { 
     $this->bootstrap('FrontController'); 
     $router = $this->getResource('FrontController')->getRouter(); 
     $router->removeDefaultRoutes(); 
     $plainPathRoute = new Zend_Controller_Router_Route(
         ':module/:controller/:action/*', 
         array(
          'module' => 'default', 
          'controller' => 'index', 
          'action' => 'index', 
         ) 
     ); 
     $router->addRoute('default', $plainPathRoute); 
     $config = $this->getOptions(); 
     $hostnameRoute = new Zend_Controller_Router_Route_Hostname(
         ':agency.' . $config['siteUri'], 
         NULL, 
         array(
          'agency' => '([a-z0-9]+)' 
         ) 
     ); 
     $router->addRoute('subdomain', $hostnameRoute->chain($plainPathRoute)); 
    } 
} 

如果提供有效的子域(即。只包含字符a-z0-9),它會在代理中傳遞,如果不是,那麼代理不會被設置。 (至少它適用於我使用ZF 1.11.3:p)。

+0

+1我試了一下,它的工作:) – tawfekov 2011-03-03 15:49:30

+0

我有使用它的同樣的問題。我的路由器在本地主機上正常工作。這意味着問題不在他們身上,而是放在Apache的某個地方。 – Fenec 2011-03-03 15:56:38

+0

你真的用你本地主機上的子域來測試它們嗎?如果它在本地工作並且不能在線工作,那麼它可能是應用程序中的配置問題(即,您的站點URI可能是錯誤的)或者在apache配置中。順便說一句,你改變設置後重新啓動Apache? – wimvds 2011-03-03 21:17:08