【问题标题】:CakePHP subdomains with htaccess带有 htaccess 的 CakePHP 子域
【发布时间】:2015-07-12 04:27:25
【问题描述】:

我在其他应用程序的 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/admin 我最终会在http://admin.cameron.com/

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

但是这对 CakePHP 2.x 不起作用,因为它显然是重写...

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

<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>

如果我转到:http://cameron.com/admin,它只会尝试加载 AdminController 而不会重定向您,如果我转到:http://admin.cameron.com/,我只会收到 500 内部服务器错误。

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

【问题讨论】:

  • 如果我是对的,您是否只想将 url 更改为指向子域的 url?
  • 尝试在您的 webroot .htaccess 文件中的 RewriteEngine On 之后添加此语句 RewriteBase /app/webroot

标签: php apache .htaccess cakephp mod-rewrite


【解决方案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>

【讨论】:

  • 您有完整的 htaccess 示例吗?因为我的规则在与 CakePHP 一起使用之前有效,这就是问题所在。
  • $ cat app/webroot/.htaccess &lt;IfModule mod_rewrite.c&gt; RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] RewriteCond %{HTTP_HOST} ^admin.cake.local RewriteRule ^(.*)$ http://cake.local/admin/$1 [P,L,NC] &lt;/IfModule&gt;
  • 我也用以前评论的更易读的版本更新了答案
【解决方案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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 2014-07-05
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多