Php 如何在Zend框架中路由动态子域?

Php 如何在Zend框架中路由动态子域?,php,apache,zend-framework,subdomain,zend-route,Php,Apache,Zend Framework,Subdomain,Zend Route,我对zend_路由器_主机名上的“动态子域”有问题,我的代码如下(我没有这样的子域,但不使用子域作为路由参数): 但当我尝试调用例如: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 我的vhost配置是: Virtual

我对zend_路由器_主机名上的“动态子域”有问题,我的代码如下(我没有这样的子域,但不使用子域作为路由参数):

但当我尝试调用例如: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
我的vhost配置是:

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>

但问题仍然存在,我不知道如何解决这种情况,是否知道我做错了什么?

向/etc/hosts添加通配符是不可能的,但在我们的情况下也是必需的。 然而,这是如何进行的:

安装

那么

然后,编辑/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_控制器_路由器_主机名,而是使用

看完这份文件,你应该会没事的

$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。有时,重新启动系统会有所帮助


喜欢编码!:)

我明白了,问题是你在路由器中定义的任何东西都会被检查为你的基本域的“后缀”。示例::xyz/yes将是example.com/xyz/{value}/yes,因为您使用了点,所以它也应该给您一个错误!不管怎样,让我检查一下。不过,主机文件现在已正确设置,请等待路由器脚本。@Axxxon我已编辑了文章。检查要使用的功能是否正确(提供了链接)。另外,勾选正确,如果有效,如果无效,请告诉我发生了什么!我已经按照您的建议@KarmicDice进行了更改,现在在尝试访问mysite.local时,我重定向到了www.mysite.local,但子域仍然存在问题。您的htaccess是否有可能导致冲突?重定向到www了吗?真奇怪!你增加了路线?我想是你干的!好的,你的控制器呢,它正在获取getParam(pl),不是吗?@Axxxon哟!经过长时间的咖啡啜饮,终于得到了解决方案:D/etc/hosts wildcards!=工作因此,将您的/etc/hosts按原样放置。并按照上述解决方案进行操作。如果仍然没有,请返回并提及它。:)不要让你的应用程序复杂化。首先在服务器配置中路由子域,然后在Zend Framework中执行标准路由。你的申请会向你表示感谢。
address=/mysite.local/127.0.0.1
listen-address=127.0.0.1
~$ sudo ./usr/local/sbin/dnsmasq
$toRoute = new Zend_Controller_Router_Route_Hostname(
    ':language.mysite.local',
    array(
        'controller' => 'index',
        'action' => 'index',
        'language' => 'pl')
    ) );