我有一个位于/m/
的CakePHP应用程序。我想编写一个根级.htaccess
文件,该文件会将网站的“子域名”重定向为操作的参数。
例如:我想写一个重写规则,这将导致像这样的重定向 -
http://mysite.myserver.com
→http://myserver.com/m/mysite/
http://mysite.myserver.com/home
→http://myserver.com/m/mysite/home
http://mysite.myserver.com/foo/bar?baz=true
→http://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
。
如何更改重写规则以使其正常工作?还有另一种方法可以实现这个目标吗?
答案 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]