我正在尝试使用Apache htaccess文件进行子域重写,并需要一些帮助。
我正在尝试获取 http:// xyz .example.com 内部处理的请求,就好像用户已请求 http://example.com/ xyz 因此用户在其地址栏中看不到此网址 - 他们会看到子域版本。
由于此也之后的任何内容也需要传递,例如用户请求 http:// xyz ,这有点复杂。 example.com/test/word/?x=123 然后这需要由服务器处理,就好像他们已经访问过 http://example.com/ xyz /测试/字/ X = 123
该网站正在Code Igniter框架上运行,该框架也有自己的htaccess规则,但我想这些重写将在这些重写之前完成。
非常感谢任何帮助!
答案 0 :(得分:0)
以下mod_rewrite规则集应执行您需要的重写:
RewriteCond $0 !^(index\.php/)?xyz
RewriteCond %{HTTP_HOST} ^xyz\.
RewriteRule ^.*$ /xyz/$0 [L]
查询字符串会自动传递,因为我们在重写时没有更改它。
为了让CodeIgnitor选择此更改,您需要使用PATH_INFO
作为路由信息的来源。您需要将$config['uri_protocol']
设置为PATH_INFO
或AUTO
,并且您的CodeIgnitor RewriteRule
应如下所示:
RewriteRule ^.*$ /index.php/$0
如果您在尝试使用PATH_INFO
时遇到问题,则需要找到一种方法让CodeIgnitor解析$_SERVER['REDIRECT_URL']
(并将L
标志添加到第一个RewriteRule
1}}在那里)。希望这不是必要的,但如果你不能让它工作,否则我会研究你如何做到这一点。