导致Codeigniter控制器的子域?

2022-08-30 17:40:42

这似乎是一个常见的要求,但我无法找到有关执行此类操作的明确说明。

我想要一个子域来触发我的 CI 安装上的某个控制器。例如:

students.mysite.com:将打开 mysite.com/students(技术上:mysite.com/index.php/students控制器:学生)

teachers.mysite.com : 将打开 mysite.com/teachers

同时在更深的遍历时保留子域。例如:

students.mysite.com/help : 将打开 mysite.com/students/help控制器students()方法help())

students.mysite.com/help/contact:将打开 mysite.com/students/help/contact控制器学生()方法帮助()参数“联系”)

students.mysite.com/help/contact/email:将打开 mysite.com/students/help/contact控制器学生()方法帮助()参数“联系人”,“电子邮件”)

我意识到 something.mysite.com 现在返回一个错误。所以我想:

步骤 1 将允许 anything.mysite.com 返回根 (mysite.com/index.php)

步骤 2 将读取子域并调用该控制器

步骤 3 将读取第一个“/”之后的第一个参数并调用控制器的该方法,并将剩余的 url 部分作为参数传递

我想我真的在第1步被难住了。我使用的是共享主机帐户,这是可以通过CPanel执行的操作吗?我尝试为*.mysite.com 添加一个子域,没有任何运气(除非我只需要等待更长的时间来宣传,但我觉得我弄错了的可能性更高)。

回到我的家庭WAMP安装,我会改变httpd.conf,对吧?我可以在不修改该文件的情况下达到这种效果吗(因为我可能无法,因为我是使用 webhostinghub.com 共享的)

哎呀,谢谢你抽出时间!- 基思


答案 1

由于您希望使用特定的域来引导控制器,因此我想出的是使用该文件来实现它。这个想法是根据您使用的子域加载不同的控制器,因此,您不必为您的域编写路由列表,而是根据您从中访问的域编写路由列表:application/config/routes.php

switch ( $_SERVER['HTTP_HOST'] ) {
    case 'students.mysite.com':
        $route['default_controller'] = "students";
    break;
    case 'teachers.mysite.com':
        $route['default_controller'] = "teachers";
    default:
        // The list of your $routes lines at is was...
    break;
}

要做到这一点,你只需要将子域指向你的CI项目(Dwayne Towell在另一个答案的步骤1中解释了如何完美地做到这一点),你就可以让一切正常,你的共享主机不会成为问题,你也不必配置服务器。

更新

阅读此答案后,检查@Josh(https://stackoverflow.com/a/47368922/1168804)的答案,因为它提供了一种组织路由代码的绝佳方法,以避免控制器的意外路由行为。值得一读(并投票,;D)


答案 2

步骤1:在CPanel的域中,在子域中,添加(您只输入部分)以重定向到(您不输入任何内容和/或删除通配符)(或将其设置为当前 www.mysite.com 的当前默认值。*.mysite.com*/public_html/

步骤2和3:使用mod_rewrite捕获子域并将其移动到URL的“目录”部分。我怀疑它会是这样的:(但我还没有尝试过,RewriteLogLevel 9是你的朋友)

RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^\.]+)\.mysite\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/index.php/%1/$1 [L]

我也不知道你是否可以使用.我只从httpd.conf重写过。.htaccess


推荐