【问题标题】:mod_rewrite: subdomain to controllermod_rewrite:子域到控制器
【发布时间】:2011-10-11 18:45:13
【问题描述】:

所以我有mydomain.tldwww.mydomain.tldres.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 个内部重定向的限制。

标签: php codeigniter mod-rewrite subdomain


【解决方案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 启动整个过程。
      猜你喜欢
      • 2011-04-23
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      相关资源
      最近更新 更多