背景
我有一个 CakePHP 应用程序,位于/m/
。我想写一个根级别的.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
如预期的。
如何更改重写规则以使其正常工作?还有其他方法可以实现此目的吗?
您所要求的(更改 URL 中的域名但不让浏览器看到 URL 更改)在正常情况下是无法实现的。然而,为了使它成为可能,你有enable mod_proxy
在您的 Apache 中并重新启动它。完成后,在站点根目录 .htaccess 中使用以下代码:
RewriteCond %{HTTP_HOST} ^([^.]+)\.myserver\.com$ [NC]
RewriteRule !^m/ http://myserver.com/m/sites/%1%{REQUEST_URI} [NC,L,P]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)