CodeIgniter htaccess 和 URL 重写问题

2022-08-30 11:27:51

我以前从未使用过CodeIgniter,更不用说任何php框架了,我想我会尝试一下。一切正常,除了我似乎无法从URL中删除索引.php并且仍然访问我的页面。

我从未使用过MVC结构,所以我正在学习,所以如果我做错了,请原谅我。

我正在尝试通过简单地键入localhost / ci / about来访问我创建的名为“about_page.php”的视图,但目前我只能使用localhost / ci / index.php / about来访问它

页面的控制器是:/application/controllers/about.php
页面的模型是:/application/models/about_model.php
页面的 View 是:/application/views/about_page.php

我已经搜索了这个问题的解决方案,但无法找到。以下是我已经搜索过的地方:

CodeIgniter - 删除索引.php
Codeigniter - 如何从url中删除索引.php?
http://www.farinspace.com/codeigniter-htaccess-file/

CodeIgniter在“application”文件夹中附带了一个.htaccess文件,该文件仅包含.因此,我在根目录中创建了一个新的.htaccess文件,并将以下代码添加到其中:Allow Deny From Allhttp://localhost/ci/.htaccess

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

当.htaccess文件位于根目录中时,我收到500内部服务器错误。当我将完全相同的文件复制到应用程序文件夹时,500错误消失了,但我仍然无法使用localhost/ci/about访问“关于”页面

我已经更改为 和 我尝试更改为,但我仍然收到内部服务器错误。$config['index_page'] = 'index.php';$config['index_page'] = '';$config['uri_protocol'] = 'AUTO';$config['uri_protocol'] = 'REQUEST_URI';

我进入了httpd.conf文件并取消了对mod_rewrite.so模块的评论,以便我知道mod_rewrite处于活动状态。

有没有人有任何想法,为什么这不起作用,或者我如何得到这项工作?我知道StackOverflow上有很多关于这个主题的问题,但我找不到一个回答我的问题。

我这样做对吗?我甚至应该能够通过访问localhost/ci/about来访问“关于”页面,还是必须在“应用程序”目录中创建一个“关于”目录?


答案 1

有3个步骤要删除。index.php

  1. 在文件中进行以下更改application/config.php

    $config['base_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/Your Ci folder_name';
    $config['index_page'] = '';
    $config['uri_protocol'] = 'AUTO';
    
  2. 使用以下代码在根目录中制作文件.htaccess

    RewriteEngine on
    RewriteCond $1 !^(index\.php|resources|robots\.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
    
  3. 启用重写引擎(如果尚未启用)

    我。首先,使用以下命令启动它:

    a2enmod rewrite
    

    ii. 编辑文件/etc/apache2/sites-enabled/000-default

    全部更改为 。AllowOverride NoneAllowOverride All

    注意:在最新版本中,您需要更改文件/etc/apache2/apache2.conf

    iii. 使用以下命令重新启动服务器:

    sudo /etc/init.d/apache2 restart
    

答案 2

你的是稍微偏离。看看我的:.htaccess

 RewriteEngine On
 RewriteBase /codeigniter  

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system)
  RewriteRule ^(.*)$ /codeigniter/index.php?/$1 [L]

注意两个地方的“codeigniter”。

之后,在您的配置中:

base_url = "http://localhost/codeigniter"
index = ""

在适当的情况下将 codeigniter 更改为“ci”


推荐