CodeIgniter htaccess和URL重写问题

Ty *_*ley 38 php .htaccess codeigniter

我之前从未使用过CodeIgniter,更不用说任何php框架了,我想我会尝试一下.一切都很顺利,除了我似乎无法从URL中删除index.php并仍然访问我的页面.

我从来没有使用过MVC结构,因此我正在学习,所以请原谅我,如果我做错了.

我试图通过输入localhost/ci/about来访问我创建的名为'about_page.php'的视图,但目前我只能使用localhost/ci/index.php/about来访问它.

页面的控制器:/application/controllers/about.php
页面的型号是:/application/models/about_model.php
和视图的页面是:/application/views/about_page.php

我已经搜索了这个问题的解决方案,但一直找不到.这是我已经搜索过的地方:

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

CodeIgniter在'application'文件夹中附带一个.htaccess文件,该文件只包含Allow Deny From All.所以我在根目录中创建了一个新的.htaccess文件,http://localhost/ci/.htaccess并将此代码添加到它:

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

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

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

我进入了httpd.conf文件并取消注释了mod_rewrite.so模块,因此我知道mod_rewrite处于活动状态.

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

我这样做了吗?我是否应该通过访问localhost/ci/about来访问about页面,或者我是否必须在'application'目录中创建一个'about'目录?

Rah*_*pad 75

有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';
    
    Run Code Online (Sandbox Code Playgroud)
  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]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 启用重写引擎(如果尚未启用)

    一世.首先,使用以下命令启动它:

    a2enmod rewrite
    
    Run Code Online (Sandbox Code Playgroud)

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

    全部更改AllowOverride NoneAllowOverride All.

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

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

    sudo /etc/init.d/apache2 restart
    
    Run Code Online (Sandbox Code Playgroud)

  • `将AllowOverride None更改为AllowOverride All`这非常重要,但几乎没有提及.在更改之后,你的.htaccess无关紧要. (7认同)

jma*_*sen 5

.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]
Run Code Online (Sandbox Code Playgroud)

请注意两个地方的"codeigniter".

在那之后,在你的配置中:

base_url = "http://localhost/codeigniter"
index = ""
Run Code Online (Sandbox Code Playgroud)

在适当的时候将codeigniter更改为"ci"