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があります。何が問題になるのか知りたいだけですか?
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クライアントソフトウェアを使用してサーバーに接続する方法を知っていると思います。この方法がうまくいかない場合は、以下にコメントしてください。
これを使えます。これは、私にとってgodaddyホスティングで機能します。
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php?/$1
次のコードを貼り付けます
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構成を無効にします
幸運を!
これを試してみてください。
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]
すべてのコントローラーを小文字にしてみてください。これで問題が解決します。
index.phpで「test」をエコーして.thenを実行すると、それが呼び出されているかどうかを確認できます。設定ファイルでエラーログを有効にします。/application/logsフォルダーを書き込み可能にします。 /application/config/config.php
セットする。 $config['log_threshold'] = 4;
ログを確認してください/application/logs
フォルダ
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フォルダーに適切なアクセス許可を設定して、排他的に書き込み可能にする必要があります。
うまくいくと思います。
ここで述べたように、localhostではコードは正常に機能していますが、ライブサーバーに移動すると404エラーが発生します。確認する必要があるいくつかのケースがあるかもしれません:
ステップ1: Apache構成でmod_rewriteが有効になっているかどうかを確認します
ステップ2: @geordyが提案したように、codeigniter構成のindex.phpを削除します
あなたはそれをチェックすることができます
<?php
echo 'Test'; die;
?>
ルートindex.phpに。それはあなたのすべてのリクエストがこのファイルを通過することを保証します、そうでなければCodeigniterフレームワークは正しく機能しません。
サーバーネットワーキングの知識は限られていますが、これでいくつかのアイデアが得られます。
まず、.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が他のホスティングで機能していないことです。これはいくつかの理由で可能です:
<?php phpinfo(); ?>
と「ロードされたモジュール」でmod_rewriteが存在するかどうかを確認します。この例 image です。$config['base_url'] = "yourdomainname.com"; $config['index_page'] = '';
これにより、.htaccessが機能しなかった理由の混乱が解消されることを願っています。