2011-05-13 90 views
3

我从来没有重写过一个URL,除去我的CodeIgniter安装的index.php部分,并且我通过在我的.htaccess文件中使用复制粘贴的代码片段来完成。我没有时间去真正了解片段的功能。我基本上是重写URL的新手。重写CI URL

我有我的web应用程序的移动版本。我尽可能将移动用户重定向到一个子域:m.myhost.tld。但是,因为我使用(一个)CodeIgniter(安装),所以我必须将这些移动用户发送到移动专用控制器,在我的情况下是/mobile/。所以,控制器总是显示在我的地址栏中。

我只是不认为这是很干净,我正在寻找一种方法来重写URL;但事实告诉我,我甚至不知道这是否可能..因此我的问题。 我想摆脱/mobile控制器部分。这可能吗?

一些例子:

我现在的移动 '根' 文件夹是

http://m.myhost.tld/mobile

我想谈谈这个一进

http://m.myhost.tld/

此刻,当我去http://m.myhost.tld/,它重定向到我的CodeIgniter应用程序的默认控制器,这是该Web应用程序的“桌面”版本的一部分。

又如:

谈到

http://m.myhost.tld/mobile#mobile/about

http://m.myhost.tld/#mobile/about

我不知道如果我在这里做任何意义。我在我的脑海中,但就像我说的,我不知道究竟是什么。如果用户位于m子域,我想隐藏我的网址的/mobile部分。但是,只有当我们使用m子域名时,所以'桌面'版本(位于www)根本不会被触及。

就像我现在说过几次,我不确定什么是可能的,我在找什么可能只是太复杂或什么。我想我会问,虽然问问是我最擅长的。请不要太难我,如果这原来是一个愚蠢的问题,先生的专业人士;)

编辑: 我以为我会编辑,因为我不想错了。我不一定在寻找我的问题的确切答案。我也欢迎可能指导我解决问题的文档/教程/文章。如果我能设法提出自己的解决方案,我当然会学到更多。

非常感谢。

回答

2

这可能是过于简单的解决方案,但为什么不是你路由的配置做一些简单的像

在你的配置

这样做

if ($_SERVER['SERVER_NAME'] == 'm.myhost.tld') 
    $route['default_controller'] = "mobile"; 

这将使默认控制器美孚这样你就不必有/移动...

正如我说也许太简单

+0

呵呵,我老实说厌倦了自己,总是看起来太硬了,我总是试图让它比实际上更难。 非常感谢! – cabaret 2011-05-14 11:20:13

0

编辑:不行的,但也许有人可以把它变成的东西做

试试这个:在

RewriteCond $1!^mobile/ 
RewriteCond %{HTTP_HOST} ^m\.myhost\.tld 
RewriteRule (.*) /mobile/$1 [L] 
+0

感谢,似乎没有工作,虽然。我想你的答案有一个小小的错字? '%{HTTP_HOST}'。但是它仍然不起作用;我收到了一个巨大的403错误:您无权访问/index.php//mobile/index.php/mobile/index.php/mobile/index/...(等等)服务器。 – cabaret 2011-05-13 19:00:39

+0

啊呀,这是有道理的 - 它只是一个无限的重定向。这将教会我在早上回答关于SO的问题:D我将继续并删除它,如果我拿出其他东西,我会发布它。 – 2011-05-13 19:28:52

+0

我编辑了我的原始答案,添加了一个应该确保它不会无限重定向的条件。给它一个镜头,让我知道它是否工作。 – 2011-05-13 19:38:08