Codeigniter 删除 index.php 在本地工作,但不适用于 aws ELB

Posted

技术标签:

【中文标题】Codeigniter 删除 index.php 在本地工作,但不适用于 aws ELB【英文标题】:Codeigniter removed index.php works locally but not on aws ELB 【发布时间】:2020-04-14 20:50:49 【问题描述】:

我在 docker 中有一个 codeigniter 应用程序。

本地:本地主机/登录 OK

AWS ELB:www.mywebsite.com/Login KO

AWS ELB:www.mywebsite.com/index.php/Login OK

这是我的 Dockerfile

FROM php:7.1-apache

RUN apt-get update && apt-get install -y git-core cron \
  libjpeg-dev libmcrypt-dev libpng-dev libpq-dev \
  && rm -rf /var/lib/apt/lists/* \
  && docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
  && docker-php-ext-install gd mcrypt mysqli opcache pdo pdo_mysql zip



RUN  \
    echo 'opcache.memory_consumption=128'; \
    echo 'opcache.interned_strings_buffer=8'; \
    echo 'opcache.max_accelerated_files=4000'; \
    echo 'opcache.revalidate_freq=2'; \
    echo 'opcache.fast_shutdown=1'; \
    echo 'opcache.enable_cli=1'; \
   > /usr/local/etc/php/conf.d/docker-ci-opcache.ini

RUN  \
    echo 'log_errors=on'; \
    echo 'display_errors=off'; \
    echo 'upload_max_filesize=32M'; \
    echo 'post_max_size=32M'; \
    echo 'memory_limit=128M'; \
    echo 'date.timezone="UTC"'; \
   > /usr/local/etc/php/conf.d/docker-ci-php.ini

RUN  \
    echo '<FilesMatch "^\.">'; \
    echo '    Order allow,deny'; \
    echo '    Deny from all'; \
    echo '</FilesMatch>'; \
    echo '<DirectoryMatch "^\.|\/\.">'; \
    echo '    Order allow,deny'; \
    echo '    Deny from all'; \
    echo '</DirectoryMatch>'; \
   > /etc/apache2/conf-available/docker-ci-php.conf

RUN a2enconf docker-ci-php

RUN a2enmod rewrite

COPY . /var/www/html

EXPOSE 80

这在本地运行良好,但是在 aws ELB 上部署此应用程序时需要在 url 上使用 index.php。

config.php

$config['base_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/';

$config['index_page'] = '';

$config['uri_protocol'] = 'AUTO';

.htaccess

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

【问题讨论】:

【参考方案1】:

您需要启用重写引擎

如果您使用的是 Ubuntu,请使用以下命令

sudo a2enmod rewrite启用.htaccess

【讨论】:

以上是关于Codeigniter 删除 index.php 在本地工作,但不适用于 aws ELB的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 表单打开如何删除 index.php

从 URL 中删除 index.php (CodeIgniter)

无法从 codeigniter 中的 URL 中删除“Index.php”

从 URL 中删除 index.php - Codeigniter 2

无法在 Codeigniter 中删除 index.php

Tomcat删除index.php Codeigniter