别名域到Zend目录

时间:2010-08-18 13:41:57

标签: php apache zend-framework .htaccess mod-rewrite

我在domainA.com上有一个ZF网站,我想将domainB.com别名为:domainA.com/photos/album,以便该相册成为domainB的根目录。

如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

此处的第一步是使用mod_rewrite将URL重写为正确的路由。您现有的.htaccess根页面顶部的内容应该有效:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST}    =domainB.com [NC]
RewriteCond %{REQUEST_URI} !^/photos/album
RewriteRule .* /photos/album/$0 [L]

如果/photos/album/后没有指定路径,则会重定向到domainB.com。如果我没记错的话,Zend Framework对于你的控制器/动作是否以斜杠终止是不挑剔的,所以这应该没问题。如果由于某种原因它需要/photos/album,我也有一个解决方案,但如果不需要它就太过分了。

稍后,您的规则集会将URL转换为index.php,Zend Framework会将其路由。但是,Zend Framework执行路由的默认方式是使用REQUEST_URI,在这种情况下恰好不是我们想要的(它将是domainB.com之后传递的内容,而不是我们重写请求的内容至)。我们实际上需要使用由REDIRECT_URL新设置的RewriteRule

controller request documentation描述了这种情况(种类),并解释了您可以使用Zend_Controller_Request_Apache404作为插入请求对象来获取正确的路由信息​​:

$request = new Zend_Controller_Request_Apache404();
$front->setRequest($request);

我很确定你也可以获得当前的请求对象,然后调用

$request->setRequestUri($_SERVER['REDIRECT_URL']);

就可以了。只需在主机上调整此操作,并希望它们都能正常运行。