web-dev-qa-db-ja.com

CodeIgniter 404ページが見つかりませんが、なぜですか?

2つのアプリケーション(パブリックアプリと管理アプリ)にCodeIgniterを使用しています。ドキュメント構造の重要な要素は次のとおりです。

/admin
/admin/.htaccess
/admin/index.html
/application
/application/admin
/application/public
/system
.htaccess
index.php

/admin/.htaccessファイルは次のようになります。

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

/admin/index.phpには次の変更があります。

$system_folder = "../system";
$application_folder = "../application/admin"; (this line exists of course twice)

また、/ application/admin/config/routes.phpには次のものが含まれています。

$route['default_controller'] = "welcome";
$route['admin'] = 'welcome';

ようこそが私のデフォルトのコントローラーです。

ドメイン/管理者を呼び出すと、404ページが見つかりませんというエラーが表示されます。 Domain/admin/welcomeを呼び出すと、すべて正常に動作します。デバッグログに次のエラーメッセージが表示されます。

DEBUG - 2010-09-20 16:27:34 --> Config Class Initialized
DEBUG - 2010-09-20 16:27:34 --> Hooks Class Initialized
DEBUG - 2010-09-20 16:27:34 --> URI Class Initialized
ERROR - 2010-09-20 16:27:34 --> 404 Page Not Found --> admin

奇妙なことに、このセットアップはローカルMAMPインストール(localdomain/admin /を使用)で完全に機能しますが、「ライブ」サーバーで公開およびテストすると、404エラーが発生します。

何か案は?何が間違っていますか?ありがとうC.

18
Joseph

問題の原因は、サーバーがFastCGIを使用してPHPを実行していたことです。

Config.phpを次のように変更した後

$config['uri_protocol'] = "REQUEST_URI";

すべてが働いた。

15
Joseph

私の状況に出会った他の人のために、この答えをここに残します。

私のcodeigniterアプリはlocalhost/WAMPで正常に機能していましたが、AWS EC2インスタンスにプッシュするときに404 not foundエラーをルーティングして生成できませんでした。私の問題は、 [〜#〜] here [〜#〜]htaccessがlocalhostで動作するという回答から解決されました。 EC2インスタンスでは機能しません

(私の管理ページへのルート){domain}/adminが404を生成していました

/etc/httpd/conf/httpd.confファイルを変更する必要があります。

-「DocumentRoot "/ var/www/html"」の各インスタンス(2箇所)の後、「AllowOverride None」を「AllowOverride All」に変更する必要がありました。

AWSダッシュボードからEC2インスタンスを再起動しました。

{domain}/adminがアクセス可能になり、意図したとおりに動作するようになりました。

これが他の誰かが私を助けてくれたことを願っています!

7
JoshuaC

2つのうちの1つまたは両方の組み合わせを試すことができます。

  1. コントローラの名前が大文字で始まることを確認してください。例:「Mycontroller.php」
  2. 何らかの奇妙な理由でルートを変更していない場合は、URLに大文字を含める必要があります。たとえば、コントローラーが「mycontroller.php」で、「testfunc」という名前の関数がある場合、URLは次のようになります。「 http://www.yourdomain/index.php/Mycontroller/testfunc = "。大文字に注意してください。 (htindexファイルを追加して 'index.php'部分を削除していないと仮定しています。もしあれば、URLから削除してください。)

これが誰かの助けになることを願っています

6
Amin Balogun
  1. コントローラ名の最初の文字を大文字に変更します。
  2. コントローラー名と同じURLを変更します。

例えば:

コントローラー名はYourControllerです

URLは次のとおりである必要があります。

http://example.com/index.php/YourController/method

ではない:

http://example.com/index.php/yourcontroller/method

4
DevYuan

サーバー側で小文字でコントローラー名を指定する必要があります

$this->class = strtolower(__CLASS__);
2
MAK

新しい環境に移行した後も同じ問題が発生し、サーバーがmod_rewriteを実行しなかったというだけでした

クイック Sudo a2enmod rewriteその後Sudo systemctl restart Apache2

そして問題が解決しました...

質問に対するコメントでそれを指摘してくれた@fanisに感謝します。

1
Antony P.

あなたのフォルダ/ファイル構造は私には少し奇妙に思えます。あなたがこれをどのようにレイアウトしたかはわかりません。

こんにちは2つのアプリケーション(パブリックアプリと管理アプリ)にCodeIgniterを使用しています。

これは、2つの別個のCIインストールがあるように思えます。これが事実なら、私はそれに対してお勧めします。管理コントローラーですべての管理項目を処理しないのはなぜですか? 2つの別個のCIインストールが必要な場合は、それらが明確に別個のエンティティであり、2つが互いに競合しないことを確認してください。この行:

$system_folder = "../system";
$application_folder = "../application/admin"; (this line exists of course twice)

そして、あなたがこれが存在すると言った場所(/admin/index.php ...または/ admin/application/configを意味していましたか?)に頭を悩ませています。トップレベルにadmin/application/adminとシステムフォルダーがありますか?

1
treeface

私の場合、localhostで使用していましたが、.htaccessRewriteBaseを変更するのを忘れていました。

0
user3526