我想在检测到移动浏览器时重写URL以访问Yii模块。在Yii中,我创建了一个名为mobile
的新模块。我不使用主题(这是移动网站的常用方法),因为我打算为普通浏览器和移动浏览器用户实现完全不同的逻辑。
mobile
模块将使用http://localhost/project/mobile
(或生产中的http://project/mobile
)进行访问。
Yii的默认.htaccess
文件低于
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
问题是我想为移动浏览器访问的每个URL插入字符串mobile
。
例如
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中的规则
答案 0 :(得分:3)
试试这个
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]
它改编自此http://ohryan.ca/blog/2011/01/21/modern-mobile-redirect-using-htaccess/
中显示的.htaccess
答案 1 :(得分:1)
这里最简单的方法是将所有移动功能分组到“移动”模块下,并使用Yii的PreRouter功能在Yii中重定向用户。这使您可以更好地控制一切。
class PreRouter
{
public function routeRequest($oEvent)
{
$oApp = $oEvent->sender;
if (<isMobile>)
$oApp->defaultModule = 'mobile';
}
}
在您的配置中添加:
'onbeginRequest' => array('PreRouter', 'routeRequest'),
在主阵列下(所以不在模块下,这是一个应用程序设置)。
如上所述,这让你可以控制一切。您可以确定何时重定向用户(例如,iPad也是移动设备,但很多人都想要常规网站)。使用此方法,您可以将其存储在Cookie中,以便他们希望保留在普通网站上而不是移动设备等。
我知道它不是你要求的重写,但我仍然希望你找到答案有用:)