簡體   English   中英

帶有htaccess的CakePHP子域

[英]CakePHP subdomains with htaccess

我在其他應用程序的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://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/adminhttp://cameron.com/admin它只是嘗試加載AdminController並且不會重定向你,如果我去: http://admin.cameron.com/http://admin.cameron.com/我只是得到500內部服務器錯誤。

有關如何使CakePHP正常工作的任何想法?

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

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

因此,您只需要為重定向設置SAME請求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>
  <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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM