0

我有一个带有一个控制器的 codeigniter 应用程序(main.php)

目前,我将 htaccess 文件设置为删除 index.php 和 main.php

所以不是 www.domain.com/index.php/main/function_name,而是 www.domain.com/function_name

我的 htaccess 文件如下所示:

 <IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /


RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]


RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/main/$1 [L]

ErrorDocument 404 /index.php

我现在需要在网站上添加一大块。它目前内置在一个单独的 codeigniter 应用程序中,我需要将它移过来。该站点的新部分位于 controllers/manage_emails/contacts.php...

我的问题是,在大多数情况下,如何更改 htaccess 文件以从 URL 中删除 main.php,但是如果您输入 www.domain.com/manage_emails/contollername,它将转到正确的控制器。

谢谢!

4

5 回答 5

5

据我了解,您有两个不同的问题:

1.从Codeigniter的默认中删除index.php文件

2.将任何呼叫从“www.domain.com/main/method”重定向到“www.domain.com/method”

对于第一个问题,我总是使用 Elliot Haughin 的用于 CI 的 htaccess 文件:CodeIgniter 和 mod_rewrite 与多个应用程序

对于第二个问题,您需要在 CI 中更改 config/routes.php,并添加以下行:

$route['(:any)'] = "main/$1"; 

..你也可以查看这篇文章:Codeigniter, bypassing the main or default controller

尝试将这两个问题分开,就像已经说过的那样,坚持使用 CI 进行路由,只使用 htaccess 从 URL 中删除 index.php。

于 2013-04-26T14:27:19.923 回答
1

除了@despina 答案我想添加一些东西:

您必须$route['(:any)'] = "main/$1";在最后一个路由设置,因为 CI 会按照它们在 routes.php 文件中出现的顺序处理路由,因此如果您将 $route['(:any)'] 放在顶部,它将处理任何事情。

所以你的 route.php 文件将是这样的:

$route['controllers/manage_emails/something.php'] = 'controllers/manage_emails/something.php'
$route['(:any)'] = "main/$1"; 
于 2013-05-02T03:06:48.503 回答
1

如果您从 .htaccess 文件中删除任何 URI 路由,并让您的 CodeIgniter 的路由为您执行此操作,您的应用程序将更容易管理。

您的 .htaccess 应该只有标准的“摆脱 index.php”代码(最后一部分,没有/main它)。然后,您的应用程序的路由可以定义其余 URL 的时间/位置。

仅供参考,如果您使用的是更新版本的 CI,例如 2.1.x,则不需要 .htaccess 中的系统和应用程序文件夹特定规则。

于 2013-04-22T02:45:56.423 回答
0
//config/routes.php
    $route['404_override'] = 'main/route';
//controllers/main.php
class Main {
...........
   function route() {
      $methodName = $this->uri->segment(1);
      if(method_exists($methodName, $this)) {
       $this->{$methodName}();
      } else {
        show_404();
      }
   }
}
于 2013-04-29T08:21:12.590 回答
0

首先,您的 2 条规则不正确,很可能无法正常工作。这是您的 .htaccess 的固定版本,其中添加了一条要求的新规则:

RewriteEngine On
RewriteBase /

RewriteRule ^(?:application|system)(/.*|)$ /index.php?/$1 [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/manage_emails/contollername [NC]
RewriteRule ^(.*)$ index.php?/main/$1 [L]

错误文档 404 /index.php

于 2013-04-25T21:28:17.473 回答