2015-05-02 18 views
18

Użyłem następujących reguł w moim pliku htaccess w innych aplikacjach, aby przekierować użytkowników z folderu do subdomeny, ale załadować zawartość z tego folderu podczas uzyskiwania dostępu do tej subdomeny.Subdomeny CakePHP z 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] 

Więc jeśli pójdę do: http://cameron.com/admin skończę na http://admin.cameron.com/

ale zawartość jest ładowany z http://cameron.com/admin

Jednak to nie działa dla CakePHP 2.x powodu jego przepisywanie widocznie ...

w moim pliku .htaccess w /app/webroot mam:

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

Jeśli przejdę do: http://cameron.com/admin to po prostu próbuje załadować AdminController i nie przekierowuje, a jeśli przejdę do: http://admin.cameron.com/ Po prostu otrzymuję błąd wewnętrznego serwera 500.

Wszelkie pomysły na to, jak uzyskać to działa dla CakePHP?

+0

Jeśli mam rację, czy po prostu chcesz zmienić URL, by wskazywał, że od subdomeny? – Daniel

+0

Spróbuj dodać to stwierdzenie RewriteBase/app/webroot po RewriteEngine On w pliku startowym .htaccess. – SoftwareCarpenter

Odpowiedz

1

CakePHP i prawie każdy inny framework PHP analizować $ _SERVER [ „REQUEST_URI”] w celu trasy Twoja prośba do konkretnego kontrolera

więcej informacji tutaj: https://github.com/cakephp/cakephp/blob/2.6/lib/Cake/Network/CakeRequest.php#L230,

więc po prostu trzeba mieć taki sam Żądaj parametrów URI przekierowania, aby aplikacja działała.

Na starym miejscu było „/ admin”, na nowym miejscu powinny być takie same, ale nie chcesz, aby go zdać, więc lepiej jest zmienić zadanie takiego:

„Kiedy przejdziesz na stronę admin.site.com zostaniesz przekierowany na stronę.com/admin ".

Można to zrobić po prostu tak:

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

Nie jest to przykład roboczych od reguły, bo trzeba także przepisać żądania subdomeny za URI, aby dostać wszystko działa i to zależy od wymagań, ale może być smth tak:

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

UPD: prawdziwy przykład

$ 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

Czy masz pełny przykład htaccess, który działa? Ponieważ moje zasady działały przed użyciem z CakePHP, gdzie jest problem. – Cameron

+1

$ cat app/webroot/.htaccess ' RewriteEngine On RewriteCond% { REQUEST_FILENAME}! -d RewriteCond% {REQUEST_FILENAME}! -f RewriteRule^indeksu.php [L] RewriteCond% {HTTP_HOST}^admin.cake.local RewriteRule^(. *) $ http: //cake.local/admin/$1 [P, L, NC] ' – aeryaguzov

+2

Zaktualizowałem odpowiedź też z bardziej czytelną wersją poprzedniego komentarza – 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>