简体   繁体   English

尝试访问没有index.php的codeigniter网址时出现404错误

[英]404 error while trying to access codeigniter url's without index.php

Hi i recently changed my hosting to AWS. 嗨,我最近将托管改为了AWS。 I created an instance and hosted my website and trying to access it same like old hosting. 我创建了一个实例并托管了我的网站,并尝试像以前的托管一样访问它。 But i am not able to access it when i tried to access inner pages without index.php in the url. 但是当我尝试访问URL中没有index.php的内部页面时,我无法访问它。 But if i used index.php it's working fine. 但是,如果我使用index.php,它就可以正常工作。 I tried different configurations in .htaccess file. 我在.htaccess文件中尝试了不同的配置。

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?$1 [L]


<IfModule mod_expires.c>
  ExpiresActive on

# Your document html
  ExpiresByType text/html "access plus 0 seconds"

# Media: images, video, audio
  ExpiresByType audio/ogg "access plus 1 month"
  ExpiresByType image/gif "access plus 1 month"
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType video/mp4 "access plus 1 month"
  ExpiresByType video/ogg "access plus 1 month"
  ExpiresByType video/webm "access plus 1 month"

# CSS and JavaScript
  ExpiresByType application/javascript "access plus 1 year"
  ExpiresByType text/css "access plus 1 year"
</IfModule>

Right now my config file configurations are like this below. 现在我的配置文件配置如下。

$config['base_url']     = 'http://www.cofounder.in/';

/*
|--------------------------------------------------------------------------
| Index File
|--------------------------------------------------------------------------
|
| Typically this will be your index.php file, unless you've renamed it to
| something else. If you are using mod_rewrite to remove the page set this
| variable so that it is blank.
|
*/
$config['index_page'] = 'index.php?';

/*
|--------------------------------------------------------------------------
| URI PROTOCOL
|--------------------------------------------------------------------------
|
| This item determines which server global should be used to retrieve the
| URI string.  The default setting of 'AUTO' works for most servers.
| If your links do not seem to work, try one of the other delicious flavors:
|
| 'AUTO'                        Default - auto detects
| 'PATH_INFO'           Uses the PATH_INFO
| 'QUERY_STRING'        Uses the QUERY_STRING
| 'REQUEST_URI'         Uses the REQUEST_URI
| 'ORIG_PATH_INFO'      Uses the ORIG_PATH_INFO
|
*/
$config['uri_protocol'] = 'AUTO';

Please make sure your " mod_rewrite " is On. 请确保您的“ mod_rewrite处于打开状态。 Might be this is issue. 可能是这个问题。

make change in: 改变:

$config['index_page'] = 'index.php?';

to

$config['index_page'] = '';

.htaccess .htaccess

# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://abc.com/$1 [L,R=301] 
# you want to restrict from url
RewriteCond $1 !^(index\.php|images|mobile|templates|favicon\.ico|robots\.txt)  
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA]
 # can give your server port number not necessary
RewriteCond %{SERVER_PORT} 443

change 更改

$config['index_page'] = 'index.php?';

to

$config['index_page'] = 'index.php';

then use this code in your htaccess file 然后在您的htaccess文件中使用此代码

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

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    ErrorDocument 404 /index.php
</IfModule>

SOmetimes you may need to change 有时您可能需要更改

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

to

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

you may also need to change 您可能还需要更改

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

by putting the other protocols mentioned above in the config.php file 通过将上面提到的其他协议放在config.php文件中

Here is my .htaccess try this if possible 这是我的.htaccess,请尝试

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond $1 !^(index\.php|images|stylesheets|javascript)
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    # Submitted by: ElliotHaughin

    ErrorDocument 404 /index.php
</IfModule> 

In your config change it to : 在您的配置中将其更改为:

$config['base_url']     = '';
$config['index_page']     = '';

I had this problem some time before and this works for me by changing in my apache sites AllowOverride None ==> AllowOverride All in /etc/apache2/sites-available 我之前有这个问题,可以通过在我的apache站点中进行更改来解决我的问题,AllowOverride None ==> AllowOverride / etc / apache2 / sites-available中的All

In Ubuntu(as yours is a Ubuntu system) 在Ubuntu中(因为您是Ubuntu系统)

Step-1 第1步

Disable the site in apache 在apache中禁用网站

sudo a2dissite yoursitename (In my case it was default) sudo a2dissite yoursitename(在我的情况下为默认)

Step-2 第2步

Edit the site 编辑网站

sudo vi yoursitename (you can use other editors like nano instead of vi) sudo vi yoursitename(您可以使用其他编辑器,例如nano代替vi)

and replace 并更换

AllowOverride None ==> AllowOverride All AllowOverride无==> AllowOverride全部

Your virtual host should ultimately look something like this: 您的虚拟主机最终应该看起来像这样:

<VirtualHost *:80>
  ServerName example.com
  DocumentRoot /var/www/vhosts/example.com
  <Directory /var/www/vhosts/example.com>
    AllowOverride all
  </Directory>
</VirtualHost>

Step 3 第三步

Enable the site 启用网站

sudo a2ensite default sudo a2ensite默认

Step-4 第四步

Restart Apache 重新启动Apache

sudo service apache2 restart sudo服务apache2重新启动

Now you check your app. 现在,您检查您的应用程序。 it might work. 它可能会起作用。

Please let me know if you face any issues in this. 如果您遇到任何问题,请告诉我。

A same kind of discussion here that might helpful 此处的同类讨论可能会有所帮助

Make change in: 进行以下更改:

$config['index_page'] = 'index.php?';

to

$config['index_page'] = '';

.htaccess .htaccess

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

Options All -Indexes

save this .htaccess file in your root folder 将此.htaccess文件保存在您的根文件夹中

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM