0

zend_router_hostnameの「動的サブドメイン」に問題があります。次のようなコードがあります(そのようなサブドメインはありませんが、ルートパラメーターとしてサブドメインを使用したい):

protected function _initRoutes() {
        $front = Zend_Controller_Front::getInstance();
        $router = $front->getRouter();
        $config = $this->getOptions();
        Zend_Registry::set("config", $config);
        $routerHost = new Zend_Controller_Router_Hostname(':language.mysite.local',
                        array('controller' => 'index',
                            'action' => 'index',
                            'language'=>'pl')
);
        $router->addDefaultRoutes();
        $routes = $router->getRoutes();
        foreach ($routes as $key => $routeEntry) {
            $router->addRoute($key, $routeHost->chain($routeEntry));
        }
    }

しかし、たとえば:pl.mysite.localを呼び出そうとすると、サーバーが見つかりませんというエラーが表示されます。私の/etc/hostsファイルは次のとおりです。

127.0.0.1       localhost
127.0.2.1       mysite.local
127.0.3.1       mysite.dev
127.0.4.1       mysite.production

そして私の仮想ホストの設定は次のとおりです。

VirtualHost *:80>
   DocumentRoot "/var/www/mysite/public"
   ServerName mysite.local
   ServerAlias *.mysite.local
   # This should be omitted in the production environment
   SetEnv APPLICATION_ENV development
   <Directory "/var/www/mysite/public">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>

</VirtualHost>

私は次のようなエントリでdnsmasqを使用しようとしました:

address=/local/127.0.0.1

しかし、それでも問題は発生します。この状況を解決する方法がわかりません。何が間違っているのかわかりません。

4

1 に答える 1

2

/ etc / hostsにワイルドカードを追加することはできませんが、この場合は必須です。ただし、これはそれを実行する方法です。

dnsmasqをインストールします

それから、

cp /usr/share/doc/dnsmasq-base/examples/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf

次に、/ usr / local / etc / dnsmasq.confを編集して、以下を追加します。

address=/mysite.local/127.0.0.1
listen-address=127.0.0.1

DNSMASQを開始します。

~$ sudo ./usr/local/sbin/dnsmasq

さらに、Zend_Controller_Router_Hostnameを使用する代わりに、Zend_Controller_Router_Route_Hostnameを使用します

ドキュメントに目を通すと、大丈夫です。

$toRoute = new Zend_Controller_Router_Route_Hostname(
    ':language.mysite.local',
    array(
        'controller' => 'index',
        'action' => 'index',
        'language' => 'pl')
    ) );

PS:/etc/resolv.confでnameserverを127.0.0.1として言及することを忘れないでください。時々、システムを再起動することが役立ちます!

コーディングをお楽しみください!:)

于 2012-08-09T06:01:48.017 に答える