【发布时间】:2018-05-12 02:49:15
【问题描述】:
背景
我有一个位于/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。
如何更改我的重写规则以使其正常工作?有没有其他方法可以做到这一点?
【问题讨论】:
-
嗯,现在不行,
.htaccess文件的写法。 -
我不确定您认为
$_SERVER['REQUEST_URI']的作用是什么,但这只是一个 PHP 常量,它包含域名后面的部分(例如 /index.php)。它与重写没有任何关系。快速浏览一下,您的 RewriteRule 中 /m/ 之后的sites位在您的问题的其余部分中没有提到,您确定它应该在那里吗? -
@Oldskool:感谢您指出
sites位,但这只是一个错字。我指出$_SERVER['REQUEST_URI']的原因是,理想情况下,我想以某种方式“欺骗”它。我相信 CakePHP 正在使用该变量来解析路由,这就是为什么(即使我的.htaccess规则 technically 指向正确的 URL)它不起作用。有没有办法用.htaccess规则来解决这个问题?
标签: php apache .htaccess cakephp mod-rewrite