CakePHP 子域与 htaccess

2022-08-30 21:23:24

我在其他应用程序的 htaccess 文件中使用以下规则将用户从文件夹重定向到子域,但在访问该子域时从该文件夹加载内容。

# REWRITE SUBDOMAIN TO FOLDER
RewriteCond %{HTTP_HOST} ^admin\.cameron\.com$
RewriteRule !^admin/? admin%{REQUEST_URI} [NC,L]

# REWRITE FOLDER TO SUBDOMAIN
RewriteCond %{THE_REQUEST} \s/admin/([^\s]*) [NC]
RewriteRule ^ http://admin.cameron.com/%1 [R=301,L]

所以如果我去:我最终在http://cameron.com/adminhttp://admin.cameron.com/

但内容是从http://cameron.com/admin

然而,这不适用于CakePHP 2.x,因为它显然重写了...

在我的htaccess文件中,我有:/app/webroot

<IfModule mod_rewrite.c>

    RewriteEngine On

    # CAKEPHP RULES
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]

    # REWRITE SUBDOMAIN TO FOLDER
    RewriteCond %{HTTP_HOST} ^admin\.cameron\.com$
    RewriteRule !^admin/? admin%{REQUEST_URI} [NC,L]

    # REWRITE FOLDER TO SUBDOMAIN
    RewriteCond %{THE_REQUEST} \s/admin/([^\s]*) [NC]
    RewriteRule ^ http://admin.cameron.com/%1 [R=301,L]

</IfModule>

如果我去:它只是尝试加载管理员控制器,并没有重定向你,如果我去:我只是得到一个500内部服务器错误。http://cameron.com/adminhttp://admin.cameron.com/

关于如何让它为CakePHP工作的任何想法?


答案 1

CakePHP和几乎任何其他PHP框架解析$_SERVER['REQUEST_URI'],以便将您的请求路由到特定的控制器

更多信息在这里: https://github.com/cakephp/cakephp/blob/2.6/lib/Cake/Network/CakeRequest.php#L230

因此,您只需要为重定向提供相同的请求URI参数即可使应用程序正常工作。

对于您的旧位置,它是“/admin”,对于新位置,它应该是相同的,但是您不想传递它,因此最好像这样更改任务:

“当你去 admin.site.com 你将被重定向到 site.com/admin”。

这可以像这样简单地完成:

RewriteRule ^([^.]+)\.example\.com http://example.com/$1

它不是规则的工作示例,因为您还需要重写子域的请求URI以使所有内容正常工作,这取决于您的要求,但可以像这样:

RewriteRule ^([^.]+)\.example\.com(.*) http://example.com/$1/$2

UPD:真实示例

$ cat app/webroot/.htaccess 
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    RewriteCond %{HTTP_HOST} ^admin.example.com
    RewriteRule ^(.*)$ http://example.com/admin/$1 [P,L,NC]
</IfModule>

答案 2
  <IfModule mod_rewrite.c>
  #standard cake htaccess stuff
  ...

  RewriteCond %{HTTP_HOST} ^profile\.thechatfun\.com$ [NC]
  RewriteRule ^(.*)$ http://www.thechatfun.com/users/profile/$1 [R=301,L]

  RewriteCond %{HTTP_HOST} ^chat\.thechatfun\.com$ [NC]
  RewriteRule ^(.*)$ http://www.thechatfun.com/chats/index/$1 [R=301,L]

</IfModule>

推荐