Codeigniter - .htaccess给出404页面找不到(文件在子文件夹中)

时间:2015-05-22 02:37:18

标签: php .htaccess codeigniter

当我上传文件时,我将它们上传到共享主机中。问题是我的codeigniter的文件和文件夹位于其中一个网站名称文件夹中。

当我访问该网站时,它给我一个404错误。

我的.htaccesss文件:

<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
    RewriteRule ^(.*)$ index.php?$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
     ErrorDocument 404 index.php
</IfModule>

我真的不知道该怎么办。任何帮助都是适用的。感谢。

编辑:当我编辑index.php文件并只添加echo 'Hey';之类的内容并删除.htaccess文件时,它可以正常工作。

8 个答案:

答案 0 :(得分:1)

根据您的文件结构:

file structure

404错误可能与此部分有关:

<IfModule !mod_rewrite.c>
     ErrorDocument 404 index.php
</IfModule>

这意味着:如果Apache模块mod_rewrite.c未被使用或不存在,则所有404都将被发送到index.php 。如果您的codeigniter index.php位于根“web”文件夹(public_html)中,那么您应该编写ErrorDocument 404 /index.php。如果它在您需要的任何子文件夹中,例如:/dyar.no/index.php,其余规则也应指向相同的index.php。 如果您将当前的.htaccess放在index.php(您网站的根文件夹的同一文件夹)附近,那么它当前的效果很好。

此外,如果你没有有意义的条件和规则,.htaccess是没用的。你拥有的那个是专门用于codeigniter的,它有一个system和一个application文件夹。

您可以在其他网站的文件夹中包含多个.htaccess文件(如果您在多个文件夹中使用codeigniter,请将.htaccess复制到这些子文件夹,例如:if dyar.no 正在使用.htaccess到该文件夹​​的codeigniter副本。)

我的建议

我注意到您还在使用 Wordpress ,因此可以相应地更改这些规则...所以删除当前的根.htaccess文件(来自public_html文件夹)并安装BulletProof Security你的wordpress网站插件。完成后,在管理仪表板(BPS选项卡)中,您只需单击生成安全.htaccess (它会根据您的文件结构生成强大的.htaccess,并将涵盖大多数安全问题)。之后,在根文件夹和管理文件夹上激活它,你应该完全覆盖它。

生成的.htaccess也可以很好地引用你可能需要的其他.htaccess。

http://www.askapache.com/htaccess/htaccess.html是我发现理解和编写.htaccess和here are a few examples的最佳参考资料之一。

希望它有所帮助!

答案 1 :(得分:1)

.htaccess 文件中添加以下内容

RewriteEngine on
RewriteCond $1 !^(index\.php|folername|uploaded|dist|images|plugins|js|css|cache|robots\.txt)
RewriteRule ^(.*)$ /projectfoldername/index.php/$1 [L]

注意:projectfoldername是您的htdocs或项目文件夹名称

答案 2 :(得分:0)

试着改变你的最后一行,请告诉我

  

RewriteRule .* index.php/$0 [PT,L]

答案 3 :(得分:0)

试用此代码:

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

答案 4 :(得分:0)

试试这段代码:

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

答案 5 :(得分:0)

尝试使用.htaccess

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

您还需要更改config > config.php

$config['base_url'] = '';

$config['index_page'] = '';

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

然后您的网址就像projectname/contrillerName/functionName/

一样

答案 6 :(得分:0)

我建议在.htaccess中使用Rewrite base /{your codeigniter folder}/,这对我有用。

答案 7 :(得分:0)

在.htaccess

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

在config.php(application/config

$config['base_url'] = 'http://stackoverflow.com/'; # set this to prevent HOST Injectio.
$config['index_page'] = '';