2015-05-02 98 views
18

我在其他應用程序的htaccess文件中使用了以下規則,將用戶從文件夾重定向到子域,但在訪問該子域時從該文件夾加載內容。CakePHP子域與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的工作顯然...

在我的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> 

如果我去:http://cameron.com/admin它只是試圖加載AdminController,並沒有重定向你,如果我去:http://admin.cameron.com/我只是得到一個500內部服務器錯誤。

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

+0

如果我是正確的,你只是想更改URL指向的子域的? – Daniel

+0

嘗試添加此語句RewriteBase/app/webroot之後RewriteEngine在您的webroot .htaccess文件中 – SoftwareCarpenter

回答

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

您是否有完整的htaccess示例可用?由於我的規則在與CakePHP一起使用之前工作,這是問題所在。 – Cameron

+1

$貓的應用程序/ Web根目錄/的.htaccess ' RewriteEngine敘述在 的RewriteCond%{} REQUEST_FILENAME!-d 的RewriteCond%{} REQUEST_FILENAME!-f 重寫規則^指數。[*] ' – aeryaguzov

+2

我已更新以前的評論更具可讀性版本 – aeryaguzov

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