php - 将子域重定向到 CakePHP 操作

标签 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 .
  • 如果我使用上面的 .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/

相关文章:

当用户仍在网站上时 PHP session 过期

JavaScript 中的 PHP 代码

php - 未定义索引 : REMOTE_ADDR while Laravel migrate

从服务器检索时 CSS 样式完全丢失,为什么?

.htaccess - 使用 Wordpress 重写多语言网站的规则

php - 如何用 PHP 制作群组电子邮件

javascript - 如何将外部 php 文件字符串分配给 javascript 变量?

javascript - 当前目录的 404 重定向工作

php - 要求(): Failed opening required (include_path ='.;C:\xampp\php\PEAR' )

javascript - 让文件://access http://localhost