2010-08-31 43 views
0

我想获得一个子域重写工作使用Apache htaccess文件,需要一些帮助,请。htaccess - 重写请求的子域到一个文件夹,与查询字符串

我试图获得HTTP请求:// XYZ .example.com的内部处理仿佛用户曾要求http://example.com/ XYZ所以用户在他们的地址栏中没有看到这个URL - 他们看到了子域版本。

这是轻微的事实,任何跟随这需求如果用户请求HTTP进行过传递,例如复杂:// XYZ .example.com的/测试/字/ X = 123然后这需要由服务器处理,就好像他们已经访问过http://example.com/ xyz/test/word /?x = 123

该网站上的代码点火器框架,它有它自己的htaccess规则太运行,但我想这将改写首先要做那些前踢英寸

任何帮助将不胜感激!

+0

使用'[QSA]'来通过GET参数 – 2010-08-31 19:46:25

+0

Codeigniter是否在站点根目录或'xyz'中? – 2010-08-31 19:58:43

+0

您好蒂姆 - 代码点火器是在网站的根目录http://example.com。我有一个创建了A记录的子域,它指向与此根域相同的IP – GSA 2010-09-01 08:36:15

回答

0

以下mod_rewrite规则集应该执行你需要重写:

RewriteCond $0 !^(index\.php/)?xyz 
RewriteCond %{HTTP_HOST} ^xyz\. 
RewriteRule ^.*$ /xyz/$0 [L] 

查询字符串被自动地传承下去,因为我们还没有在改写改变了它。

对于CodeIgnitor来选择这个改变,你需要使用PATH_INFO作为路由信息的来源。你$config['uri_protocol']需要被设置为PATH_INFOAUTO这是事实,你的CodeIgnitor RewriteRule看起来应该像下面这样:

RewriteRule ^.*$ /index.php/$0 

如果你遇到麻烦,试图用PATH_INFO,你需要找到一种方法让CodeIgnitor解析$_SERVER['REDIRECT_URL'](并将L标志添加到上面的第一个RewriteRule)。希望这不应该是必要的,但如果你不能得到它的工作,否则我会研究你将如何做到这一点。

+0

您好蒂姆,感谢您的调查。然而奇怪的是,尽管设置了PATH_INFO,我仍然得到了403禁止的错误。在error_log中显示“文件名太长:无法将GET/HTTP/1.1映射到文件”。 CI RewriteRule确实看起来有些不同,但即使将其更改为您的版本,它仍然无效。好消息是,与此同时,我的一位同事也一直在试验它 - 我们都试图让它发挥作用! - 现在已经成功地使用RewriteCond%{HTTP_HOST}^xyz \ .example \ .com $ [NC] RewriteRule ^(。*)$ http://example.com/xyz/$1 [P]工作,谢谢 – GSA 2010-09-03 09:14:01

+0

@GSA - 是的,那是因为我没有考虑到CodeIgnitor重写后会发生什么。为了完整起见,我已经更新了解决方案的答案。您的同事使用'P'标志的解决方案也很好;我刚刚避免暗示,因为它具有创建全新请求作为代理的一部分的开销。无可否认,如果你的服务器没有受到压力,这是一个非问题。 – 2010-09-03 11:25:00

相关问题