4 Stimmen

Zend Framework: Subdomain-Parameter von Route erhalten

UPD: Behoben. Das Problem lag daran, dass wir nginx als Frontend verwenden. Also gibt nginx die HTTP_HOST nicht an Apache weiter.


Hallo zusammen!

Ich habe ein Problem mit immer Subdomain-Parameter in meinem Basis-Controller auf einem Produktionsserver, während auf dem localhost es ok ist. andere Parameter von url wie Controller, Aktion zurückgegeben, wie Sie sollten.

gibt bei der Produktion null zurück:

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

keine Änderungen an .htaccess vorgenommen:

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]

und hier sind meine vhost-Einstellungen:

<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>

Weiß jemand, warum das so ist?

Update:

Router in Bootstrap

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();
    }

und ja, ich habe $config['siteUri'] definiert und ich habe auch versucht, mit :agency.domain.com immer das gleiche Problem wieder

4voto

wimvds Punkte 12683

Verwenden Sie die folgende :

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));
    }
}

Wenn Sie eine gültige Subdomain angeben (d.h. nur bestehend aus den Zeichen a-z0-9), wird diese in agency übergeben, wenn nicht, wird agency nicht gesetzt. (Zumindest funktioniert es bei mir mit ZF 1.11.3 :p).

1voto

Fenec Punkte 1214

Gelöst. Das Problem lag daran, dass wir nginx als Frontend verwenden. Also gibt nginx die HTTP_HOST nicht an Apache weiter.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X