web-dev-qa-db-ja.com

Codeigniter-404 Not Foundエラーの取得

Godaddyには2つのホスティングパッケージがあります。私たちのライブウェブサイトは、次の.htaccessファイルを使用して正常に動作しています。 URLにindex.phpを使用しなくてもウェブサイトにアクセスできます。

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

他のホスティングでも同じhtaccessファイルと同じコードを使用しましたが、これもgodaddyによるものです。プロダクションと開発のインスタンスを分離したかっただけです。しかし、同じコードとhtaccessファイルを使用する他のホスティングでは、ウェブサイトに404ページが見つかりませんというエラーが表示されますが、ウェブサイトはURLのindex.phpで正常に動作します。

両方のサーバーに同じバージョンのphpがあります。何が問題になるのか知りたいだけですか?

11
Anjum

100%機能するコードを専用のDebianサーバーに移動したときも、同様の問題に直面しました。 3時間の調査の結果、htaccessファイルが機能しない理由がわかりました。Apache構成でhtaccessのオーバーライドを許可する必要があります。

手順は次のとおりです。

ステップ1:

これをhtaccessファイルに追加します

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

ステップ2:

Codeigniter設定でindex.phpを削除します

$config['index_page'] = '';

ステップ3:

Apache設定でhtaccessの上書きを許可する(コマンド)

Sudo nano /etc/Apache2/Apache2.conf

ファイルを編集して次のように変更します

AllowOverride All

wwwフォルダー用

ステップ4:

Apacheを再起動(コマンド)

Sudo /etc/init.d/Apache2 restart

Apache2.confファイルを変更する前に、そのファイルのバックアップコピーを作成してください。 Debianサーバーを使用している場合は、Sudoコマンドを回避できます。 PuTTYなどのsshクライアントソフトウェアを使用してサーバーに接続する方法を知っていると思います。この方法がうまくいかない場合は、以下にコメントしてください。

10
Geordy James

これを使えます。これは、私にとってgodaddyホスティングで機能します。

RewriteEngine On 
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php?/$1
2
Ivan

これに従ってください

  • Public_html/Projectルートに新しい.htaccessファイルを作成します
  • 次のコードを貼り付けます

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

  • オプション

LinuxターミナルまたはPuTTYのいずれかのコマンドラインでコマンドssh username@ip_addressを使用してサーバーにsshできる場合

usernameはGoDaddyから提供されたものか、rootを使用できます

ip_addressは、ホストへのパブリックIPであり、ホスティングパネルで確認できます。

コマンドSudo a2dissite 000-defaultを実行します

このコマンドは、リクエストを処理するデフォルトのApache構成を無効にします

幸運を!

2

これを試してみてください。

DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?/$1 [L,QSA]
2
Ramanjit Singh

すべてのコントローラーを小文字にしてみてください。これで問題が解決します。

1
Carlos R

index.phpで「test」をエコーし​​て.thenを実行すると、それが呼び出されているかどうかを確認できます。設定ファイルでエラーログを有効にします。/application/logsフォルダーを書き込み可能にします。 /application/config/config.php セットする。 $config['log_threshold'] = 4;

ログを確認してください/application/logsフォルダ

1
Nishancw

Godaddyサーバーに移動すると、同様の問題に直面しました。

このコードを.htaccessファイルに追加します。

<IfModule mod_rewrite.c>
    RewriteEngine On

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d

   # Rewrite all other URLs to index.php/URL
   RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 

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

設定ファイル:

$config['base_url'] = 'domain.com';
$config['index.php'] = '';

そしてSet AllowOverride to All httpd.conf

フォルダーを書き込み可能にするだけでなく、/ cacheフォルダーに適切なアクセス許可を設定して、排他的に書き込み可能にする必要があります。

うまくいくと思います。

1
Jay Kareliya

ここで述べたように、localhostではコードは正常に機能していますが、ライブサーバーに移動すると404エラーが発生します。確認する必要があるいくつかのケースがあるかもしれません:

ステップ1: Apache構成でmod_rewriteが有効になっているかどうかを確認します

ステップ2: @geordyが提案したように、codeigniter構成のindex.phpを削除します

あなたはそれをチェックすることができます

<?php
echo 'Test'; die;
?>

ルートindex.phpに。それはあなたのすべてのリクエストがこのファイルを通過することを保証します、そうでなければCodeigniterフレームワークは正しく機能しません。

0
Abhishek Singh

サーバーネットワーキングの知識は限られていますが、これでいくつかのアイデアが得られます。

まず、.htacessファイルが何であるかを知っている必要があります。ここで確認できます link

.htaccessは、Apache Webサーバーソフトウェアを実行するWebサーバーで使用する構成ファイルです。 .htaccessファイルが「Apache Webサーバーを介して読み込まれる」ディレクトリに配置されると、.htaccessファイルが検出され、Apache Webサーバーソフトウェアによって実行されます。これらの.htaccessファイルを使用して、Apache Webサーバーソフトウェアの構成を変更し、Apache Webサーバーソフトウェアが提供する追加の機能を有効/無効にすることができます。これらの機能には、404ファイルが見つかりませんというエラーが発生した場合や、コンテンツのパスワード保護や画像のホットリンク防止などのより高度な機能などの基本的なリダイレクト機能が含まれます。

基本的に.htaccessはApache Webサーバーの設定を編集する権限をあなたに与えています。 Apacheでmod_rewriteが有効になっている場合は、.htacessを使用して権限を取得します。あなたはそれをグーグルで見つけることができるので、.htaccessのその4つの基本的な行がcodeigniterで何ができるかを書きません。これ link は、いくつかの素晴らしい基本情報を提供します。

今、主な問題は、.htaccessが他のホスティングで機能していないことです。これはいくつかの理由で可能です:

  1. 何らかの理由で、Apache Webサーバーでmod_rewriteが無効になっています。ホスティングがVPSまたはDSの場合は、まだ構成していない可能性があります。mod_rewriteを有効にする方法を既に質問されている場合は、この link にアクセスしてください。共有ホスティングを使用している場合は、ホストでmod.rewriteを有効にするようにホスティングに依頼してください。ホストでmod.rewriteが有効かどうかを確認するには、次の link を実行します。または、単に<?php phpinfo(); ?>と「ロードされたモジュール」でmod_rewriteが存在するかどうかを確認します。この例 image です。
  2. ApacheをWebサーバーとして使用していません。 NGINXおよびlighttpdとして他のWebサーバーがあります。現在使用しているWebサーバーをサーバー管理者に問い合わせてください。私はNGINXとlighttpdを使用した経験がないので、そのためのお手伝いはできません。しかし、私が知る限り、.htaccessコードはApache、NGINX、およびlighttpdで異なります。 here または here で.htaccess Apacheコードをnginxコードに変換してみることができます。残念ながら.htaccessをlighttpdに変換するために、オンラインコンバーターは見つかりませんが、公式ガイド herehere があります
  3. まあ完全なヒントのために私はこれを書きます。 index.phpを使用しないようにcodeigniterを設定していない可能性があります。構成ファイルで、index_pageの空の構成。 Base_urlにドメイン名を付けます。 $config['base_url'] = "yourdomainname.com"; $config['index_page'] = '';

これにより、.htaccessが機能しなかった理由の混乱が解消されることを願っています。

0
La Croix