背景
我有一个位于 /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
. - 如果我使用上面的
.htaccess
文件浏览到http://mysite.myserver.com/home
,$_SERVER['REQUEST_URI'] =/home
.
问题
由于 $_SERVER['REQUEST_URI']
的问题,我的路由没有正确解析:它试图将用户带到 /home
而不是 /m/mysite/home
根据需要。
如何更改我的重写规则以使其正常工作?还有其他方法可以实现吗?
最佳答案
您的要求(更改 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]
关于php - 将子域重定向到 CakePHP 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10438577/