【问题标题】:Codeigniter remove /index.php from URLCodeigniter 从 URL 中删除 /index.php
【发布时间】:2014-02-28 15:51:10
【问题描述】:

好的,我知道很多人一直在问相同或相似的问题,但我似乎没有找到适合我的项目的解决方案。所以请不要把它当作重复。

我有一个使用 codeigniter 制作的网站。如果没有 url 中的 index.php,它运行得很好。所以重写成功。直到几天前:突然间管理区域(/admin)返回了 404 并且只能通过路径 '/index.php/admin' 访问。曾经可以工作的重写代码现在已经没有任何作用了。

知道我又回到了起点 -> 问题是我无法从我的网址中删除 index.php。

我尝试了很多我不知道该怎么做的事情。

应用程序存储在 'public_html/application/... 下图位于 .htaccess 文件和 index.php 所在的应用程序文件夹中。 这是更改 .htaccess 的正确位置吗?

我尝试重写 .htaccess 但没有成功:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

RewriteEngine on
RewriteCond $1 !^(index\.php|public|\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^CI/(index\.php|public|images|robots\.txt|css)
RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots|css\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

我的配置文件:

$config['base_url'] = 'http://www.mysite.be/';
$config['index_page'] = '';
$config['uri_protocol'] = 'AUTO';

Routes.php:

$route['default_controller'] = "c_home/index";
$route['404_override'] = '';
$route['admin'] = "c_home/adminpanel";
$route['logout'] = "c_login/logout";

有人知道发生了什么或如何解决这个问题吗?

提前致谢!

【问题讨论】:

  • 您的 apache 日志中是否有任何错误?并启用双重检查 mod 重写以防万一。

标签: php .htaccess codeigniter


【解决方案1】:

我不知道你在用这些代码做什么,但我只是把它放在我的 .htaccess 文件中:

RewriteRule ^(.*)$ /index.php?/$1 [L]

然后繁荣。

【讨论】:

  • 这个解决方案也不适合我。与我尝试的第四个街区几乎相同。不知道在没有 RewriteEngine 或其他任何东西的情况下这如何工作。
  • 我认为否决评论是不公平的,因为它不适用于您过于精细的设置。安装一个空白 CI 并尝试一下 - 你会发现它有效。
  • 我没有否决你的答案,是别人投的:/
【解决方案2】:

尝试设置

$config['uri_protocol'] = 'PATH_INFO'

并设置

$config['enable_query_strings'] = FALSE;

【讨论】:

  • 结合什么.htaccess?
【解决方案3】:

.htaccess 应该在 public_html 目录中——即:从当前位置上一级。 index.php 可能已经在 public_html 中并且 图片中的 index.* 是 index.html - 应该是这样。 如果 .htaccess 位于上述正确位置,则此 .htaccess 代码将起作用:

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

【讨论】:

  • 好的,这取得了一些进展,但还没有。我移动了 .htaccess,现在每当我在我的网址后面输入 /admin 时,我都会被重定向到主页。
  • 试试这条路线:$route['admin'] = "c_home/adminpanel/index";
  • 更具体地说,您最终选择了默认路由,因为您在管理员上获得了 404。我猜您正在尝试使用管理面板控制器类的索引功能,如果是这样,请尝试以下路线: $route['admin'] = "c_home/adminpanel/index";
  • 嗯,c_home 是控制器,而 adminpanel 是我试图获得的功能。在这种情况下,正确的路由是什么?
  • 如果我把 $route['default_controller'] = "c_home/adminpanel";然后路由工作,如果我只输入 url,则会显示管理区域。但是当我做 $route['admin'] = "c_home/adminpanel";如果我将 /admin 添加到 url,它不会做任何事情。
【解决方案4】:

所以我一直在搞砸这个,终于让它工作了

为此,我对 htaccess 和控制器进行了更改。
我将管理功能更改为新控制器并在 routes.php 中进行了更改

新路由

$route['admin'] = "c_login/index";

新的.htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

【讨论】:

    【解决方案5】:

    如果我们需要在 codeigniter 中从 url 中删除 /index.php 比

    应用程序/config/config.php

      $config['index_page'] = '';
    
      $config['uri_protocol'] = 'REQUEST_URI';
    

    在项目根目录添加.htaccess文件

    RewriteEngine on
    RewriteBase /[Your project folder name]/
    RewriteCond $1 !^(index.php|resources|robots.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
    

    现在你可以访问了

    http://example.com/controller/method

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2016-05-14
      • 2014-10-28
      • 2012-06-15
      • 2012-09-21
      • 2011-10-12
      • 2017-07-16
      • 1970-01-01
      相关资源
      最近更新 更多