Вставьте строку модуля Yii в URL, используя mod_rewrite для мобильного браузера. - PullRequest
1 голос
/ 31 января 2012

Я хочу переписать URL-адрес для доступа к модулю Yii при обнаружении мобильного браузера.В Yii я делаю новый модуль под названием mobile.Я не использую темы (что является распространенным методом для мобильного сайта), поскольку я намереваюсь реализовать совершенно разные логики для обычного браузера и пользователя мобильного браузера.

Модуль mobile будет доступен с помощью http://localhost/project/mobile(или http://project/mobile в работе).

Файл по умолчанию .htaccess для Yii ниже

RewriteEngine on
RewriteBase /project/
#RewriteBase / #for production

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

Проблема в том, что я хочу вставить строку mobile для каждого URL, к которому обращаетсямобильный браузер.например

http://localhost/project/user -> http://localhost/project/mobile/user
http://localhost/project/login -> http://localhost/project/mobile/login
http://localhost/project/books/1 -> http://localhost/project/mobile/books/1

или для производства.

http://project/user -> http://project/mobile/user
http://project/login -> http://project/mobile/login
http://project/books/1 -> http://project/mobile/books/1

Кто-нибудь знает, какой будет новая .htaccess для этого?

Я не против изменить несколько переменных для сервера разработки и производства, а также для определения мобильного браузера. Думаю, я могу использовать правило из http://detectmobilebrowsers.com

Ответы [ 2 ]

3 голосов
/ 31 января 2012

Попробуйте это

RewriteEngine On
RewriteBase /project/

# Redirect /project/*/ to /project/mobile/*/
RewriteCond %{REQUEST_URI} !^/project/mobile/.*$
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera|mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^(.*)$ /project/mobile/$1 [L,R]

# Forward request to Yii
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

Он был адаптирован из .htaccess, показанного здесь http://ohryan.ca/blog/2011/01/21/modern-mobile-redirect-using-htaccess/

1 голос
/ 31 января 2012

Самое простое, что вы можете сделать здесь, это сгруппировать все мобильные функции в «мобильный» модуль и использовать функцию PreRouter в Yii, чтобы перенаправить пользователя в сам Yii. Это дает вам гораздо больше контроля над всем.

class PreRouter
{ 
    public function routeRequest($oEvent)
    {
       $oApp = $oEvent->sender;
       if (<isMobile>)
          $oApp->defaultModule = 'mobile';
    }
}

В вашем конфиге вы добавляете:

'onbeginRequest' => array('PreRouter', 'routeRequest'),

Под основным массивом (поэтому НЕ под модулями, это настройка приложения).

Как уже говорилось, это дает вам большой контроль над всем. Вы можете определить, когда пользователь должен быть перенаправлен (например, iPad также является мобильным, но многие люди хотят обычный сайт). С помощью этого метода вы можете сохранить, например, cookie, чтобы они оставались на обычном сайте, а не на мобильном и т. Д.

Я знаю, что это не с переписками, как вы просили, но я все еще надеюсь, что вы найдете ответ полезным:)

...