2015-05-02 16 views
18

Kullanıcıları bir klasörden bir alt etki alanına yönlendirmek, ancak bu alt etki alanına erişirken bu klasördeki içeriği yüklemek için htaccess dosyasımda aşağıdaki kuralları kullandım. Ben gidersemhtaccess ile CakePHP alt etki alanları

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

Yani: Ancak bu görünüşte nedeniyle yeniden yazılması CakePHP 2.x için çalışmıyor http://cameron.com/admin Ben http://admin.cameron.com/

üzerinde son Ancak içerik http://cameron.com/admin

yüklenir ... /app/webroot benim htaccess dosyasında

Ben:

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

Şu numaraysa: http://cameron.com/admin yalnızca AdminController'ı yüklemeye çalışır ve sizi yönlendirmez ve eğer ben http://admin.cameron.com/'a gidersem 500 Dahili Sunucu Hatası alıyorum.

CakePHP için nasıl çalışacağınıza dair herhangi bir fikir var mı?

+0

Yanılmıyorsam, sadece alt alan bu işaret edecek url değiştirmek ister misin? – Daniel

+0

Web sitenizdeki RewriteEngine Açık öğesinden sonra RewriteBase/app/webroot ifadesini eklemeyi deneyin .htaccess dosyası – SoftwareCarpenter

cevap

1

CakePHP ve hemen hemen tüm diğer PHP çerçeve $ _SERVER ayrıştırmak

fazla bilgi burada özellikle denetleyiciye rota için [ 'REQUEST_URI'] isteğiniz: https://github.com/cakephp/cakephp/blob/2.6/lib/Cake/Network/CakeRequest.php#L230,

yüzden sadece AYNI olması gerekir Uygulamaya ulaşmak için yönlendirme için URI parametrelerini isteyin. Eski konum için

o "/ admin" idi yeni konum için olması gerektiği aynı, ama bunu geçmek istemiyoruz, nedenle böyle bir görevi değiştirmek için daha iyidir:

" admin.com/site adresine yönlendirileceksiniz.

Bu sadece böyle yapılabilir:

da her şey çalışıyor almak için için alt alan talebini URI yeniden yazmak gerekiyor ve bu sizin gereksinimlerine bağlıdır çünkü kural bir çalışma örneği değildir RewriteRule ^([^.]+)\.example\.com http://example.com/$1

,

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

UPD: ama böyle yetiremediğin olabilir gerçek örnek

$ 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

Tam bir htaccess örneğiniz var mı? Kurallarmın, sorunun olduğu CakePHP ile kullanılmadan önce çalıştığı gibi. – Cameron

+1

$ cat uygulaması/Webroot'un/.htaccess ' RewriteCond% {REQUEST_FILENAME}! RewriteCond% {REQUEST_FILENAME} -d! -f RewriteRule^endeksi günü YenidenYazmaMotoru.php [L] RewriteCond% {HTTP_HOST}^admin.cake.local RewriteRule^(. *) $ http: //cake.local/admin/$1 [P, L, NC] ' – aeryaguzov

+2

Yükledim önceki yorumun daha okunaklı versiyonu ile de bir cevap – 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>