2014-10-06 3 views
9

Я использую Cakephp framework 2.2.2.URL Rewrite create subdomain in cakephp

Я хочу создать персонализированный URL-адрес для пользователя. Например, если пользователь вводит имя пользователя = pragnesh, то они могут получить доступ к своему сайту, как: http://pragnesh.mylocalhost.com, так же, как и в blinksale.com


Мой URL: http://mylocalhost.com/test/users/front_home

Я хочу доступ к нему по адресу: http://test.mylocalhost.com/users/front_home

Мой URL: http://mylocalhost.com/test/setting/pages можно получить по адресу: http://test.mylocalhost.com/setting/pages

любой URL: http://mylocalhost.com/test/xxxxx/xxxxx
можно получить по адресу: http://test.mylocalhost.com/xxxxx/xxxxx


ИЛИ


URL: http://mylocalhost.com/users/front_home?site=test

Я хочу получить к нему доступ по адресу: http://test.mylocalhost.com/users/front_home

Мой URL: http://mylocalhost.com/setting/pages?site=test
можно получить по адресу: http://test.mylocalhost.com/setting/pages

любой URL: http://mylocalhost.com/xxxxx/xxxxx?site=test
можно получить по адресу: http://test.mylocalhost.com/xxxxx/xxxxx


Мой вопрос может быть возможно дубликат My cakephp 2.2 site not working on subdomain , но нет ответа вывешенным.

Я попытался ниже код в \ приложение \ webroot.htaccess

htaccess subdomai (part 2)

RewriteCond %{QUERY_STRING} !^([^&]*&)*site=[^&]+ 
RewriteCond %{HTTP_HOST} !^www\.mylocalhost.com 
RewriteCond %{HTTP_HOST} ([a-zA-Z0-9]+)\.mylocalhost.com 
RewriteRule ^([^\.]*).php$ /$1.php?user=%1 [QSA,L,R] 

URL rewrite for Subdomain

# capture first part of host name 
RewriteCond %{HTTP_HOST} ^([^.]+)\.mylocalhost\.com$ [NC] 
# make sure site= query parameter isn't there 
RewriteCond %{QUERY_STRING} !(^|&)site= [NC] 
# rewrite to current URI?site=backererence #1 from host name 
RewriteRule^%{REQUEST_URI}?site=%1 [L,QSA] 

но и не работает для меня.

мой корень.htaccss файл

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ app/webroot/ [L] 
    RewriteRule (.*) app/webroot/$1 [L] 
</IfModule> 

\ app.htaccess

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ webroot/ [L] 
    RewriteRule (.*) webroot/$1 [L] 
</IfModule> 

\ приложение \ webroot.htaccess

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php [QSA,L] 
</IfModule> 

виртуального хоста в httpd.conf

<VirtualHost *:80> 
    DocumentRoot "E:/xampp/htdocs/bsale" 
    ServerName mylocalhost.com 
    ServerAlias *.mylocalhost.com 
    <Directory "C:/xampp/htdocs/bsale"> 
     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

HOST FILE

127.0.0.1 mylocalhost.com 
127.0.0.1 *.mylocalhost.com 
+0

Что такое DocumentRoot вашего тестового субдомена? Можете ли вы также опубликовать запись 'VirtualHost' субдомена' test' из конфигурации Apache? – anubhava

+0

document root - mylocalhost, у меня нет доступа к файлам хостинга. –

+0

'DocumentRoot' должен быть полным файловым путем, и вам нужно знать точный' DocumentRoot' для домена root и 'test'. – anubhava

ответ

1

Вы можете оставить свой .htaccess, как в стандартном CakePHP/.htaccess CakePHP/приложение/.htaccess CakePHP/приложение/Webroot/.htaccess

Вам нужно будет виртуальный хост, как сейчас, указывает на ваше приложение.

Что вам действительно нужно смотреть на это приложение/Config/routes.php

посмотрите на строку, которая говорит:

CakePlugin::routes(); 

Таким образом, до того момента, как вы можете сделать все, что вы потребность (с маршрутами). Представим пользователь JohnDoe имеет http://johndoe.yourapp.com/

Получить субдомен с URL, что-то вроде этого:

array_shift((explode(".",'subdomain.my.com'))); 

с помощью:

$_SERVER['HTTP_HOST'] 


Router::connect('/users/front_home', array('controller' => 'users', 'action' => 'front_home', $yourSubDomain)); 

или просто оставить маршрутизатор в покое и обнаружить субдомен в ваш AppController и используйте его в любом месте вашего приложения.