3

背景

我有一个 CakePHP 应用程序,它位于/m/. 我想编写一个根级.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按照需要。

如何更改我的重写规则以使其正常工作?还有另一种方法可以做到这一点吗?

4

1 回答 1

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]
于 2012-05-03T20:53:17.123 回答