无法从AWS(ec2-user)中的codeigniter URL中删除index.php

时间:2018-12-04 15:23:03

标签: amazon-web-services codeigniter amazon-ec2 codeigniter-3

我正在使用AWS构建应用程序。下面显示的是我正在使用的.htaccess

 <IfModule mod_rewrite.c>
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
  </IfModule>

使用此.htaccess时出现以下错误,

enter image description here

如果未使用.htaccess,则一切正常。非常感谢您提供有关如何解决此问题的指导。谢谢。

2 个答案:

答案 0 :(得分:1)

该错误可能不是由于.htaccess引起的。您很可能没有正确设置服务器配置,并没有授予访问文件夹的权限。

在Apache Web服务器中,通常在配置的<Directory>部分中设置该权限。这是一个通用示例。

<VirtualHost _default_:443>
    ServerName example.com
    DocumentRoot /var/www/example/htdocs

  <Directory /var/www/example/htdocs>
    AllowOverride All
    Require all granted

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

  # many other directives too

</VirtualHost>

提供许可的指令是行Require all granted。通常可以在/etc/apache2/sites-available中存储的文件中找到以上内容。

请注意,您可以在服务器配置文件中使用RewriteEngine。实际上,那是最好的方法。仅当您无法自己编辑配置文件(即共享主机)时才应使用.htaccess。但是,由于您使用的是AWS,因此您可以而且必须自己管理配置。一些读物很好地解释了为什么you should not use .htaccess

“它在没有.htaccess的情况下工作”的行为可能是因为指令AllowOverride None生效。该指令关闭了在目录上使用.htaccess的功能。当您通过.htaccess尝试“覆盖指令”时,权限将被拒绝。

另一个可能的问题是,拥有index.php的文件夹没有正确的“所有权”,通常是通过变体找到的“ www-data:www-data”。

答案 1 :(得分:0)

编辑以下文件:

/etc/httpd/conf.d/vhost.conf

您将看到以下代码:

 <Directory /var/www/html/foldername>
     AllowOverride All
 </Directory>

使用以下代码替换上面的代码:

  <Directory /var/www/vhosts/foldername>
      Options -FollowSymLinks +SymLinksIfOwnerMatch
        AllowOverride All
        Order deny,allow
        Allow from all
 </Directory>

注意:注意代码缩进,错误的缩进会导致错误。