【问题标题】:CodeIgniter: Is it possible to remove index.php without using .htaccess?CodeIgniter:是否可以在不使用 .htaccess 的情况下删除 index.php?
【发布时间】:2013-06-20 11:35:33
【问题描述】:

出于技术原因,我不想在 CodeIgniter 中使用.htaccess 从 URL 中删除 index.php。我看过路线部分。我也尝试过这样的路线:

$route['(:any)'] = 'index.php/$1';

但它不起作用。

是否可以使用 CodeIgniter 中的路由器删除 index.php

【问题讨论】:

  • 是的,您可以使用routes,它仍然可以工作,但是 index.php 仍然会出现在网址上,htaccess 会为您提供您想要的漂亮网址,并且根据您在 htaccess 规则中定义的内容,删除每个请求上的 index.php
  • 您所指的技术限制究竟是什么?
  • 如果我更改服务器或路径,那么我需要更改 .htaccess 中的RewriteBase 属性。有时我无权改变它:(@djthoms
  • 没有.htaccess就无法从url中删除,它是入口点,实际上.htaccess不会删除它,只是从url中隐藏它
  • 检查我的答案,你可能不使用.htaccess,那么你需要一个虚拟主机,或者编辑你的DNS指向index.php!它是服务器的东西而不是 php/框架的东西

标签: codeigniter .htaccess codeigniter-routing


【解决方案1】:
Is it possible to remove index.php without using .htaccess?

没有。它是 php 或 codeigniter 之外的东西,它是服务器的东西。

为什么?

当用户尝试转到localhost/codeigniter/welcome/index 时会发生什么?

MVC 基本上将所有 php 文件隐藏在其文件夹中。并且只为任何用户提供一种通过index.php与您的代码交互的方式

发生了什么

  1. 对您网站的 HTTP 请求定向到 index.php
  2. index.php 加载 codeigniter 引导并调用 codeigniter 路由器
  3. 路由器查找输入的 URL(欢迎/索引),然后从控制器文件夹中获取欢迎文件并调用索引函数。

这是所有 MVC 框架所做的非常简单的事情,隐藏您的代码并使用单个前端文件来处理所有请求并使用路由器类重定向它们。

因此,如果您想hide index.php,那么您需要找到一种方法来告诉您的服务器只需将任何调用重定向到 index.php。

index.php 是您网站的入口,您的服务器需要知道所有请求都必须发送给它。以某种方式,这就是为什么 index.php/ 必须存在于您的 url 中或使用某些服务器配置来重定向对它的调用。但它总是被加载

【讨论】:

  • 答案很好,但没有清除。 CodeIgniter 路由器实际上是做什么的?我有一些使用 CodeIgniter 路由器的具有大量自定义路由的应用程序。你能说说为什么我不能从 URL 中删除 index.php 但其他字符串。
  • route 是一个类。它所做的只是获取 PHP $_SERVER['url'] 并分解它以找到正确的控制器。我认为您缺少一件事..您在 codeigniter 项目中打开的每个页面都是在 index.php 内部打开的。index.php 是唯一的公共文件。其他文件包含在index.php 中,因此您的所有控制器等都包含在 index.php 中的include('controller/welcome)` 中,处理此包含的类.. 是路由类
  • 现在我明白了,路由器类也在 index.php 中。运行index.php 后,路由器类工作。谢谢。
【解决方案2】:

我已执行以下操作来处理不需要在您的网址中包含 index.php 的路由。

  1. 出于安全原因,我已将 index.php 重命名为 index_ci.php
  2. .htaccess 文件中,我有以下内容:

    DirectoryIndex index_ci.php index.html
    RewriteCond %{REQUEST_FILENAME} !-f  
    RewriteCond %{REQUEST_FILENAME} !-d  
    RewriteCond $1 !^(index_ci\.php) # do not allow direct access  
    RewriteRule ^(.*)$ index_ci.php/$1 [L,QSA]
    
  3. 我的routes.php 现在接受不带index.php 前缀的网址。示例:

    $route['welcome'] = "welcome";
    

【讨论】:

  • @lighta:第二次阅读他的问题我看到了你所说的:D
  • @machineaddict:谢谢。但我可以用 .htaccess 做到这一点,我只需要知道不使用 .htaccess 并且只使用 CodeIgniter 路由器的方式:)
  • 这是不可能的。不管是 CodeIgniter、其他框架还是纯 php 脚本。 url 重写发生在 apache 级别,你不能在 php 中进行。
猜你喜欢
  • 2016-02-14
  • 2019-04-06
  • 2016-05-13
  • 1970-01-01
  • 2015-03-09
  • 2012-08-15
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
相关资源
最近更新 更多