mod_rewrite:子域到控制器
Posted
技术标签:
【中文标题】mod_rewrite:子域到控制器【英文标题】:mod_rewrite: subdomain to controller 【发布时间】:2011-10-11 18:45:13 【问题描述】:所以我有mydomain.tld
、www.mydomain.tld
和res.mydomain.tld
都指向同一个目录:/var/www/mydomain
。在那个目录中,有我的 codeigniter 应用程序。
所以我要做的是将所有通过res.mydomain.tld
发出的请求转发到一个名为resources
的特定控制器。
我有什么:
RewriteCond %HTTP_HOST ^res\.mydomain\.tld$
RewriteRule ^(.*)$ /index.php?/resources/$1 [L]
这会产生服务器错误,我的重写日志没有提供任何关于原因的线索;它只是显示了一些非常奇怪的逻辑应用于请求字符串。
知道为什么这不起作用吗?
【问题讨论】:
什么样的服务器错误,apache错误页面的500内部服务器错误? 如果您没有从重写日志中获得有用的信息,错误日志会说什么? 哈克雷:是的。 Michael:只是请求超出了 10 个内部重定向的限制。 【参考方案1】:保留您之前的 .htaccess。
在你的 routes.php 中
if($_SERVER["SERVER_NAME"]=="res.mydomain.tld")
$route['default_controller'] = "resources";
else
//$route['default_controller'] = Your default controller...
【讨论】:
【参考方案2】:您创建了一个无限循环。它不断地重写,因为规则总是匹配,并且再次匹配。只需在规则上方添加如下规则即可
RewriteRule ^index.php - [L]
如果(已经重写的)url 以 index.php 开头,这将阻止其下的任何剩余规则执行
【讨论】:
【参考方案3】:确保index.php
不匹配并进入重写循环:
RewriteCond %REQUEST_URI !^index\.php
RewriteCond %HTTP_HOST ^res\.mydomain\.tld$
RewriteRule ^(.*)$ /index.php?/resources/$1 [L]
【讨论】:
但是 [L] 标志不应该避免进一步重写同一个请求吗? @Tom,不,因为它不是正在处理的另一个规则。在重定向到 index.php 之后,相同的规则再次匹配并且重定向再次发生。 (一次又一次) [L] 阻止应用当前规则下的规则。但是在完成并且重写了 url 之后,它会再次为新的 url 启动整个过程。以上是关于mod_rewrite:子域到控制器的主要内容,如果未能解决你的问题,请参考以下文章
使用 Apache mod_rewrite 相关问题的子域到文件夹
如何使用子域链接子目录? (虚拟主机、mod_rewrite、htaccess、DNS)