将子域重定向到CakePHP操作

时间:2012-05-03 20:06:28

标签: php apache .htaccess cakephp mod-rewrite

背景

我有一个位于/m/的CakePHP应用程序。我想编写一个根级.htaccess文件,该文件会将网站的“子域名”重定向为操作的参数。

例如:我想写一个重写规则,这将导致像这样的重定向 -

  • http://mysite.myserver.comhttp://myserver.com/m/mysite/
  • http://mysite.myserver.com/homehttp://myserver.com/m/mysite/home
  • http://mysite.myserver.com/foo/bar?baz=truehttp://myserver.com/m/mysite/foo/bar?baz=true

理想情况下,此重定向应对用户不可见(我不想使用301,因为我不想更改URL)。

这是我目前的尝试:

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^(.*)\.myserver\.com$ [NC]
  RewriteRule ^(.*)$ http://myserver.com/m/%1/$1 [L]
</IfModule>

据我所知,主要问题是$_SERVER['REQUEST_URI']

  • 如果我直接浏览http://myserver.com/m/mysite/home $_SERVER['REQUEST_URI'] = /m/mysite/home
  • 如果我使用上面的http://mysite.myserver.com/home文件.htaccess浏览到$_SERVER['REQUEST_URI'] = /home

问题

由于$_SERVER['REQUEST_URI']存在问题,我的路由无法正确解析:它正在尝试将用户转移到/home而不是/m/mysite/home

如何更改重写规则以使其正常工作?还有另一种方法可以实现这个目标吗?

1 个答案:

答案 0 :(得分:4)

在正常情况下,您所要求的内容(更改URL中的域名但不允许浏览器查看URL更改)是不可实现的。但是,为了使您能够在Apache中启用启用 mod_proxy并重新启动它。完成后,请在您的站点根目录中使用以下代码.htaccess:

RewriteCond %{HTTP_HOST} ^([^.]+)\.myserver\.com$ [NC]
RewriteRule !^m/ http://myserver.com/m/sites/%1%{REQUEST_URI} [NC,L,P]