Mod rewrite 使用mod_rewrite for mobile browser在URL中插入Yii模块字符串
我想在检测到移动浏览器时重写URL以访问Yii模块。在Yii中,我创建了一个名为Mod rewrite 使用mod_rewrite for mobile browser在URL中插入Yii模块字符串,mod-rewrite,apache2,yii,Mod Rewrite,Apache2,Yii,我想在检测到移动浏览器时重写URL以访问Yii模块。在Yii中,我创建了一个名为mobile的新模块。我不使用主题化(这是移动站点的常用方法),因为我打算为普通浏览器和移动浏览器用户实现完全不同的逻辑 使用http://localhost/project/mobile(或http://project/mobile正在生产中) Yii的默认.htaccess文件如下所示 RewriteEngine on RewriteBase /project/ #RewriteBase / #for produ
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
是什么吗
我不介意为开发和生产服务器以及移动浏览器检测更改几个变量,我想我可以使用中的规则。这里最简单的方法是将所有移动功能分组到“移动”模块下,并使用Yii的预路由器功能在Yii中重定向用户。这给了你更多的控制一切
class PreRouter
{
public function routeRequest($oEvent)
{
$oApp = $oEvent->sender;
if (<isMobile>)
$oApp->defaultModule = 'mobile';
}
}
在主阵列下(所以不是在模块下,这是一个应用程序设置)
如前所述,这给了你很多控制一切的能力。您可以确定用户何时被重定向(例如,iPad也是一款移动设备,但很多人希望使用常规站点)。使用此方法,您可以将他们希望保留在正常站点而不是移动站点上的cookie等存储在其中
我知道这不是你要求的重写,但我仍然希望你能找到有用的答案:)在这里,你可以做的最简单的事情是将所有移动功能分组在一个“移动”模块下,并使用Yii的预路由器功能在Yii中重定向用户。这给了你更多的控制一切
class PreRouter
{
public function routeRequest($oEvent)
{
$oApp = $oEvent->sender;
if (<isMobile>)
$oApp->defaultModule = 'mobile';
}
}
在主阵列下(所以不是在模块下,这是一个应用程序设置)
如前所述,这给了你很多控制一切的能力。您可以确定用户何时被重定向(例如,iPad也是一款移动设备,但很多人希望使用常规站点)。使用此方法,您可以将他们希望保留在正常站点而不是移动站点上的cookie等存储在其中
我知道这不是你要求的重写,但我仍然希望你能找到有用的答案:)试试这个
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
改编的试试这个
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
改编的实际上现在我更喜欢重写,因为它更简单。不过,你的回答很好。无论如何,我可以用这个方法覆盖URL规则吗?你应该可以,尽管我还没有尝试过。onBeginRequest是第一件要做的事情,甚至在WebApplication中的processRequest之前。因为它只在processRequest中进行url解析,所以应该没有问题。实际上现在我更喜欢重写,因为它更简单。不过,你的回答很好。无论如何,我可以用这个方法覆盖URL规则吗?你应该可以,尽管我还没有尝试过。onBeginRequest是第一件要做的事情,甚至在WebApplication中的processRequest之前。因为它只在processRequest中进行url解析,所以应该不会有问题。